Swift 中协议对属性的规定的疑惑

Swift_Programming_Language中有这么一段代码。

protocol FullyNamed {
    var fullName: String { get }
}

struct Person: FullyNamed {
    var fullName: String
}
let john = Person(fullName: "John Appleseed")
// john.fullName is "John Appleseed"

fullName是一个只读的属性,但是在Person将fullName实现成了可读可写的。

疑惑的是在协议中规定属性为只读并没有什么作用。

我在实现的时候并没有什么约束,即使是只读的,我也可以实现为可读可写。

仅仅是在协议中将属性规定为可读可些的时候你不能把它实现成只读的。

当声明 instance 为 protocol 类型的时候,只读属性便会生效.例如let john: FullyNamed = Person(fullName: “John Appleseed”)

“只读”是 (遵守该协议)类的该属性为只读. 别的地方修改该类实例的时候,不允许.
相当于”隔层”指定.

例如 :

protocol GameFever { // 游戏”发烧友”

// 玩家账号id,年龄 可以读取和修改
var playerId : Int { get set }
var age : Int { get set }

// 游戏名 只读
var game : String { get }

}

class Student : GameFever {

var playerId : Int = 0
var age : Int = 0
var game : String = ""

}

xxFuckFunc() {

let st = Student(id:213,age:18:game:"LOL")
print(st.game) // ok
print(st.age+st.playerId) // ok

st.age = 19 // ok
st.game = "王者荣耀" // error

}

This is readonly!

  • 这两句话的区别 Swift
  • iOS有App流量监控的解决方案吗
  • swiftyJSON : 用swiftyJSON 进行数据解析
  • Xcode7.1 Instrument 真机调试看不到具体方法
  • swift 这个帮解释下吧
  • swift循环遍历字符串,报value of type ‘String’ has no member ‘Generator’
  • 编程零基础的人如何学习Swift 来进行iOS APP的开发? Apple官网的 Swift教程貌似需要有C或OC基础.
  • ios 开发 怎么和php后端服务器保持会话
  • 输入人数后如何改变image
  • 当 translucent = false 时,如果高度不减去 navigationBar 的高度,则内容溢出?
  • Swift工程引用问题