swifter-tips / Public-Issues

Public issues for Swifter-tips book
103 stars 3 forks source link

第二章错误 #81

Closed freelf closed 6 years ago

freelf commented 6 years ago

“protocol Vehicle { var numberOfWheels: Int {get} var color: UIColor {get set}

mutating func changeColor()

}

struct MyCar: Vehicle { let numberOfWheels = 4 var color = UIColor.blue

mutating func changeColor() {
    // 因为 `color` 的类型是 `UIColor`,这里直接写 .red 就足以推断类型了
    color = .red
}

}” “如果把 protocol 定义中的 mutating 去掉的话,MyCar 就怎么都过不了编译了:保持现有代码不变的话,会报错说没有实现协议;如果去掉 mutating 的话,会报错说不能改变结构体成员。”

这里的描述不对,应该是:如果把protocol中的mutating去掉的话,MyCar会报没有遵守协议。保持不变的话是代码没错。如果把struct中的mutating去掉的话,会编译错误

onevcat commented 6 years ago

如果把 protocol 定义中的 mutating 去掉的话,MyCar 就怎么都过不了编译了:保持现有代码不变的话,会报错说没有实现协议;如果去掉 mutating 的话,会报错说不能改变结构体成员。

原文的 “都过不了编译了” 后面是一个冒号,后面的两个从句 1: “保持现有代码不变的话,会报错说没有实现协议”,2: “如果去掉 mutating 的话,会报错说不能改变结构体成员” 是针对“把protocol中的mutating去掉”这个前提下,对 MyCar 进行操作后的结果。

用词和句法不是很好,我会进行一些修正力求读起来减少歧义。

谢谢!