Structs 和 Classes
两者非常类似都有 方法 属性 初始化函数 扩展 extension 协议 proctocol。
区别是class对象是引用类型,struct 是值类型类似 Int Float 等
struts 没有继承 不能类型转换 没有析构函数 主要用户封装值
例子
struct Address { var street: String var city: String static var defaultStreet = "Xinghu street 1111" // struct level func isValid() -> Bool { if city == "suzhou"{ return true }else{ return false } } //修改成员变量函数 必须加关键字 mutating mutating func resetStreet(){ street = Address.defaultStreet } } var address = Address(street: "xinghujie",city: "suzhou") address.isValid() Address.defaultStreet
属性
通过var or let来定义变量or常量属性 对开销大的属性值 可以通过 lazy 关键字来修饰
计算属性
//不存储数据 var area : Float { get { return x*y } set(newArea) { x=newArea/y } }
属性 观察 property observer
var userName = "" { willSet(newName){ ... } didSet{ .... } }
例子
class Aman { var name = "" var strength = 20 var intelligence = 10 //延迟 属性 lazy var inventory: Int = self.importInventory() func importInventory () -> Int { return 100 } //计算属性 var dexterity : Int { get { return (strength+intelligence) /2 } set (newDextirity){ strength = dextirity/2 intelligence = Int(dextirity*1.5) } } //属性观察 var health = 100 { willSet { } didSet{ println(" ... ") } } }