美文网首页
Swift之get set

Swift之get set

作者: 小羊爱学习 | 来源:发表于2022-07-26 16:16 被阅读0次

    协议中的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

          本文链接:https://www.haomeiwen.com/subject/rdboirtx.html