Swift之get set

协议中的get set:protocol中属性可以声明为{ get }或者{ get set }。大多数人第一眼肯定觉得{ get }是约束为 read-only 属性,{ get set }是约束为 read-write 属性。但是在protocol中这些约束都是最小约束,也就是说{ get }属性至少需要是 readable 的,至于它是否 writable 并不作要求;{ get set }则明确的指出了属性必须是可读写,但是官方文档说明了,用{ get set }声明的属性,不能在遵守该协议的类型中被实现为let属性。

protocol textprotocol{
    var text: String { get }
    var text2: String { get set }
}
extension textprotocol {
    var text: String {
        return "text111"
    }
//    var text2: String {
//        return "text2222"
//    }
}
class textClass: textprotocol {
    var text2: String = "222222222"
}
        let t = textClass()
        print(t.text)
        print(t.text2)
//        t.text = "11111" 报错:text' is a get-only property
        t.text2 = "22222"
        print(t.text)
        print(t.text2)

1.{ get set }声明的属性不能被实现为let
2.{ get set }声明的属性必须要实现,即使在扩展中给了默认值也要在类中实现
3.{ get }声明的属性如果扩展中默认了属性,则可以不用在类中实现
总结:{ get set }声明的属性必须在类中实现,{ get }声明的属性如果在扩展中给出默认值,则在类中可以不用实现,也可以使用在实现中使用let修饰,来确保只读属性

class中的get
ios开发中,如果我们设置一个只读属性,oc中很简单。get既可,那么在swift中如何做呢

    //第一种,private (set) 把set设置为private的,也就是只读属性
    private (set) var nameclass: String = "name"//只读
    //第二种,利用计算属性
    var getnameclass: String {
        return nameclass
    }
    //第三种,利用方法
    func getname() -> String{
        return nameclass
    }

你可能感兴趣的:(Swift之get set)