我想知道一個簡單的類中的初始化程序等同於什麼協議,它只包含初始化功能,並且僅用於在具體類中擴展。協議擴展初始化程序
所以可能是最簡單的就是顯示代碼 - 我要找的協議擴展相當於如下:
import UIKit
class Thing {
var color:UIColor
init(color:UIColor) {
self.color = color
}
}
class NamedThing:Thing {
var name:String
init(name:String,color:UIColor) {
self.name = name
super.init(color:color)
}
}
var namedThing = NamedThing(name: "thing", color: UIColor.blueColor())
我期待的代碼看起來像:
protocol Thing {
var color:UIColor {get set}
}
extension Thing {
init(color:UIColor) {
self.color = color
}
}
class NamedThing:Thing {
var name:String
var color:UIColor
init(name:String,color:UIColor) {
self.name = name
self.init(color:color)
}
}
我見過其他StackOverflow問題(例如How to define initializers in a protocol extension?)中提出的解決方案,但我不確定它們是否工作,也沒有專門解決類初始化程序中的其他參數的這個問題。
符合AnyObject我們多餘的,隱式解包的名稱和顏色是危險的,而不是必需的(改爲設置默認值) – user3441734
感謝您的富有洞察力的評論,您似乎遇到了類似的障礙。我同意你的評論是否值得這樣做。我想我正在尋找在面向協議的方法中實現上述問題的最佳實踐。需要給vars默認值或者讓它們隱式解開對我來說似乎不是太方便也不是最好的做法,並且讓我懷疑這是否使用協議的味道對於這個問題不是正確的方法。 @ alain-t你可以使用代碼示例填寫你的評論'代表班'嗎? –
@CraigGrummitt swift中的所有變量(和/或常量)在使用之前必須有一些值(對於引用類型,Swift中的變量表示爲類,值爲引用,對於值類型,它是值self)。直接相當於null不存在的就是Swift。 var i =可選()具有默認值nil。 var j = ImplicitlyUnwrappedOptional ()給出了相同的結果(兩者都是枚舉'類型')....(繼續下面) –
user3441734