在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
属性和常量如果创建了一个结构体的实例并赋值给一个常量,则无法修改实例的任何属性: let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4) rangeOfFourItems.firstValue = 6
延迟属性
class DataManager { @lazy var importer = DataImporter() var data = String[]() // 这是提供数据管理功能 } 计算属性:getter和setter如果计算属性的 setter 没有定义表示新值的参数名,则可以使用默认名称newValue。 struct Rect{ var _center:String; var center: String { get { return _center; } set (newCenter){ _center = newCenter } } } //使用newValue struct Rect2{ var _center:String; var center: String { get { return _center; } set{ _center = newValue } } } 属性观察器
属性观察器:
struct Test{ var test:Int = 0{ willSet { println(newValue) } didSet{ println(oldValue) } } } var a = Test(); a.test = 5; 全局变量,局部变量和延迟属性,计算属性,属性观察器全局或局部变量都属于存储型变量,跟存储属性类似,它提供特定类型的存储空间,并允许读取和写入。
var test:Int = 0{ willSet { println(newValue) } didSet{ println(oldValue) } } test = 5 ; var str:String{ get{ return String(test); } set { test = newValue.toInt()!+5 } } println(str); str = "4"; println(str) 类型属性---静态属性使用关键字static来定义值类型的类型属性,关键字class来为类(class)定义类型属性: struct SomeStructure { static var storedTypeProperty = "Some value." static var computedTypeProperty: Int { // 这里返回一个 Int 值 } } enum SomeEnumeration { static var storedTypeProperty = "Some value." static var computedTypeProperty: Int { // 这里返回一个 Int 值 } } class SomeClass { class var computedTypeProperty: Int { // 这里返回一个 Int 值 } } 类型属性是通过类型本身来获取和设置,而不是通过实例。 println(SomeClass.computedTypeProperty) // 输出 "42" println(SomeStructure.storedTypeProperty) // 输出 "Some value." SomeStructure.storedTypeProperty = "Another value." println(SomeStructure.storedTypeProperty) // 输出 "Another value.” self 和 parent
struct Point { var x = 0.0, y = 0.0 mutating func moveByX(deltaX: Double, y deltaY: Double) { self = Point(x: x + deltaX, y: y + deltaY) } } enum TriStateSwitch { case Off, Low, High mutating func next() { switch self { case Off: self = Low case Low: self = High case High: self = Off } } } var ovenLight = TriStateSwitch.Low ovenLight.next() // ovenLight 现在等于 .High ovenLight.next() // ovenLight 现在等于 .Off 变异 mutating
struct Point { var x = 0.0, y = 0.0 mutating func moveByX(deltaX: Double, y deltaY: Double) { x += deltaX y += deltaY } } var somePoint = Point(x: 1.0, y: 1.0) somePoint.moveByX(2.0, y: 3.0) 实例方法
Swift 中方法的名称通常用一个介词指向方法的第一个参数,比如:with,for,by等等。
class Counter { var count: Int = 0 func incrementBy(amount: Int, numberOfTimes: Int) { count += amount * numberOfTimes } } let counter = Counter() counter.incrementBy(5, numberOfTimes: 3) 类型方法--静态方法声明类的类型方法,在方法的func关键字之前加上关键字class;声明结构体和枚举的类型方法,在方法的func关键字之前加上关键字static。 struct LevelTracker { static var highestUnlockedLevel = 1 static func unlockLevel(level: Int) { if level > highestUnlockedLevel { highestUnlockedLevel = level } } static func levelIsUnlocked(level: Int) -> Bool { return level <= highestUnlockedLevel } var currentLevel = 1 mutating func advanceToLevel(level: Int) -> Bool { if LevelTracker.levelIsUnlocked(level) { currentLevel = level return true } else { return false } } } |
请发表评论