属性的存储
属性的主要作用是存储数据,可以常量属性和变量属 性;
- struct FixedLengthRange {
- var firstValue: Int let length: Int
- }
- var rangeOfThreeItems =FixedLengthRange(firstValue: 0,
- length: 3)
- // the range represents integer values 0, 1, and2 rangeOfThreeItems.firstValue = 6
- // the range now represents integer values 6, 7, and 8
但是 rangeOfFourItems 实例为常量属性也是不可以修改的。
l
- et rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)
- // this range represents integer values 0, 1, 2, and 3 rangeOfFourItems.firstValue = 6
延时存储属性
延时存储属性是初始化时候不分配值,直到第一次使 用它。
属性@lazy 声明。
- class DataImporter {
- /*
- DataImporter is a class to import data from anexternalfile.
- The class is assumed to take a non-trivial amount of time toinitialize.
- */
- var fileName = "data.txt"
- // the DataImporter class would provide dataimporting functionality here
- }
- class DataManager {
- @lazy varimporter= DataImporter()
- var data = ""
- // the DataManager class would provide data management functionality here
- }
- let manager= DataManager() manager.data += "Some data" manager.data += "Some more data"
- println(manager.importer.fileName)
计算属性
有的时候一些属性是通过其他的属性计算得出的,通 过 get 和 set 访问器对其访问。
- //定义 Point struct Point {
- var x =0.0, y = 0.0
- }
- //定义 Size struct Size {
- var width = 0.0, height = 0.0
- }
- //定义 Rect struct Rect {
- var origin = Point()
- var size = Size()
- var center: Point {
- get {
- let centerX = origin.x+ (size.width / 2)
- let centerY = origin.y + (size.height / 2)
- return Point(x: centerX, y: centerY)
- }
- set(newCenter) {
- origin.x = newCenter.x - (size.width / 2)
- origin.y = newCenter.y - (size.height / 2)
- }
- }
- }
- var square =Rect(origin: Point(x: 0.0, y: 0.0), size: Size(width: 10.0,height: 10.0))
- let initialSquareCenter =square.center square.center = Point(x: 15.0, y: 15.0) println("square.origin is now at (\(square.origin.x),
- \(square.origin.y))")
属性观察者
为了监听属性的变化,swift 通过了属性观察者。
• willSet 观察者是在存储之前调用。
• didSet 新值存储后调用。
- class StepCounter {
- var totalSteps: Int = 0{
- willSet(newTotalSteps) {
- println("About to set totalSteps to
- \(newTotalSteps)")
- }
- didSet {
- if totalSteps >oldValue {
- steps")
- }
- println("Added \(totalSteps - oldValue)
- }
- let stepCounter = StepCounter()
- stepCounter.totalSteps = 200
- // About to set totalStepsto 200
- // Added200steps stepCounter.totalSteps = 360
- // About to set totalStepsto 360
- // Added160steps stepCounter.totalSteps = 896
- // About to set totalStepsto 896
- // Added536steps
静态属性
静态属性在结构体中使用 static 定义,类中使用 class
定义。
- struct SomeStructure {
- static var storedTypeProperty = "Some value."static var computedTypeProperty: Int{
- // return anInt value here
- }
- }
- class SomeClass {
- class varcomputedTypeProperty: Int {
- // return anInt value here
- }
- }
调用的时候可以直接使用类和结构体名调用。 实例:
- struct AudioChannel {
- static letthresholdLevel= 10
- static var maxInputLevelForAllChannels= 0 var currentLevel:Int = 0 {
- didSet {
- if currentLevel > AudioChannel.thresholdLevel {
- // cap the new audio level to the threshold level
- currentLevel = AudioChannel.thresholdLevel
- if currentLevel > AudioChannel.maxInputLevelForAllChannels {
- // storethis as the new overall maximum input level
- AudioChannel.maxInputLevelForAllChannels =
- currentLevel
- }
- }
- }
- }
- var leftChannel =AudioChannel()
- var rightChannel =AudioChannel()
- leftChannel.currentLevel = 7println(leftChannel.currentLevel)
- // prints "7"
- println(AudioChannel.maxInputLevelForAllChannels)
Swift交流讨论论坛论坛:http://www.cocoagame.net
欢迎加入Swift技术交流群:362298485
相关推荐
简单易用的工具类,根据网络请求的数据自动导入模型属性,可以自定义字段,支持嵌套模型,告别每次都需要手动输入属性,减少输入错误。
Swift 属性 Swift 属性将值跟特定的类、结构或枚举关联。 属性可分为存储属性和计算属性: 存储属性 计算属性 存储常量或变量作为实例的一部分 计算(而不是存储)一个值 用于类和结构体 用于类、结构体和...
SetNeedsDisplay此软件包提供了可用于任何NSView或UIView的属性的属性包装器,以使布局或显示无效SetNeedsDisplay此软件包提供...简介用法安装要求Swift Package Manager许可感谢联系信息用法注释符合Equata类型的属性
帮助您使用Swift属性包装器为属性定义安全存储。 :glowing_star:特征 所有密钥均使用进行哈希处理,所有值均使用 - 进行加密,以确保用户信息的安全,自动魔术化。对称密钥和随机数以完全安全的方式存储在钥匙串中...
一个简单的 Swift 属性包装器,用于在钥匙串中存储数据。 它支持: 所有Codable类型。 iOS 9+、watchOS 2+、macOS 10.10+ 和 tvOS 9+。 :baby: 用法 在您的一种类型中声明一个属性: @KeychainStored (service ...
swift 监听属性变化,用于对swift基础了解,对代码结构有严谨
(Swift)闭包作为属性
适用于本机Swift和RxSwift简单和复杂的属性包装器。 例子 克隆存储库,然后打开Carthage Project/APPropertyWrappers.xcodeproj 安装 迦太基 请检查 购物车文件: github "APUtils/APPropertyWrappers" ~> 2.0 可可...
当系统提供的类满足不了我们要求的时候, 则需我们手动添加属性,且希望能给系统直接添加属性
3、无论是声明NSString还是NSMutableString类型的属性时,我们希望此属性被赋值为NSMutableString类型的字符串后,此属性不会因这个可变类型字符串的改变而改变(这也是多数情况下的用法),那就用copy修饰属性
BonMot(发音为Bon Mo ,法语为好词)是一个Swift属性字符串库。 它抽象了iOS,macOS,tvOS和watchOS排版工具的复杂性,使您可以专注于使文本美观。 要运行示例项目,请运行pod try BonMot ,或克隆存储库,打开...
swift菜鸟入门视频教程-10-属性
(Swift)internal属性使用
Swift5.2 (model数组)归档解档
实时修改您原生iOS应用程序的属性
商城组件-加入购物车前选择商品规格属性
Swift中的属性可以被分为存储属性和计算属性,本文将为大家详解Swift中属性的声明与作用,需要的朋友可以参考下
利用runtime的class_copyPropertyList方法获取类的属性名字,以前老的代码不能用,新版的注意事项已经加到注释连了,yyModel框架也是利用这种方法遍历类属性