Swift中的类
Swift中的类类如果没有给属性提供初始值,则必须提供构造函数 要改变自身,需要加上 enum Switch{ case On case Off mutating func click(){ switch self { case .On: self = .Off case .Off: self = .On } } } var button = Switch.Off button.click() 类的等价 什么时候使用类?什么时候使用结构体? 1.结构体===值;类===物体 结构体是值类型,类是引用类型 属性和方法计算属性例如中心点的坐标是根据原点和Size计算出来的,当origin和size发生变化时,那么center则对应的要发生变化 struct Point{ var x = 0.0 var y = 0.0 } struct Size { var width = 0.0 var height = 0.0 } class Rectangle { var origin = Point() var size = Size() var center: Point{ let centerX = origin.x + size.width / 2 let centerY = origin.y + size.height / 2 return Point(x: centerX,y: centerY) } init(origin: Point,size: Size){ self.origin = origin self.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 } } 在上述的代码中,setter方法可以不声明 set{ origin.x = newValue.x - size.width / 2 origin.y = newValue.y - size.height / 2 } 类型属性如下记录游戏的最高分 class Player{ var name: String var score = 0 static var highestScore = 0 init(name: String){ self.name = name } func play(){ let score = random() % 100 self.score += score if self.score > Player.highestScore { Player.highestScore = self.score } } } 类型方法属性观察器class LightBulb{ static let maxCurrent = 30 var current = 0 { // 可以不声明新的变量名,使用newValue willSet(newCurrent){ // 此时,current还是以前的值 print("Current value changed. The change is (abs(current-newCurrent))") } // property observer可以用来限制值或者格式 // 也可以用来做关联逻辑 // 可以不声明新的变量名,使用oldValue获取原来的值 didSet(oldCurrent){ // 此时,current已经是新的值 if current == LightBulb.maxCurrent{ print("Pay attention,the current value get to the maximum point.") } else if current > LightBulb.maxCurrent{ print("Current too high,falling back to previous setting.") current = oldCurrent } print("The current is (current)") } } } let bulb = LightBulb() bulb.current = 20 bulb.current = 30 bulb.current = 40 输出结果为: Current value changed. The change is 20 The current is 20 Current value changed. The change is 10 Pay attention,the current value get to the maximum point. The current is 30 Current value changed. The change is 10 Current too high,falling back to previous setting. The current is 30 注意 延迟属性// 最佳方案,使用懒加载 lazy var sum: Int = { //print("start computing sum value") var res = 0 for i in self.start...self.end{ res += i } return res }() 继承使用 final class Magician: User { var magic = 100 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- tdd – Gallio Icarus对阵Testdriven.net [已关闭
- 你需要知道的NoSQL数据库10件事
- [React Native]react-native-scrollable-tab-vie
- 在WinForm C#中使用System.Threading.Timer进行间
- oracle内存架构(一)
- Swift UICollectionView、UITableView列点击事件
- swift – 获取没有WeekCalendarUnit的一周的第一
- Flex 学习之路之六 用户接口user interface 应用
- Cocos Creator 中使用动作系统(摘自官方文档)
- c# – 使用Azure API,如何列出虚拟目录并将其添加