[英]Why declare readonly property in protocol?
如果可以設置值槽類或結構,為什么還要在協議中聲明只讀屬性? 我不明白這個用法。 在“ The Swift Programming Book” 2.0版中
“如果協議僅要求一個屬性是可獲取的,則該要求可以由任何種類的屬性來滿足,並且如果該屬性對您自己的代碼有用,那么也可以對該屬性進行設置是有效的。”
這樣就不能從類/結構外部進行設置。 假設您的API返回了某個具有get和set屬性的協議實例(在您的協議中),那么任何獲得此實例的人都可以設置該值!
而且get和set屬性不能為常量:
protocol RWProt {
var value : Int { get set }
}
// Error: Type 'Value' does not conform to protocol 'RWProt'
struct Value : RWProt {
let value = 0
}
但是,這可行:
protocol Read {
var value : Int { get }
}
struct Value : Read {
var value = 0
mutating func change() {
value++
}
}
協議只需要該值是可獲取的,因此獲取協議屬性不僅是獲取,而是獲取或設置
好的,這是另一個示例:
import Foundation
public protocol ExternalInterface {
var value : Int { get }
}
private struct PrivateStuff : ExternalInterface {
var value = 0
mutating func doSomePrivateChangingStuff() {
value = Int(arc4random())
}
}
public func getInterfaceToPrivateStuff() -> ExternalInterface {
var stuff = PrivateStuff()
stuff.doSomePrivateChangingStuff()
return stuff
}
// In another file:
let interfaceToSomethingICantChange = getInterfaceToPrivateStuff()
// error: cannot assign to property: 'value' is a get-only property
interfaceToSomethingICantChange.value = 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.