.Netから来て、私はSwift3/iOSを習得しようとしており、オプションのプロトコルメンバーの次の見かけの一貫性のない動作に困惑しました。私は、その何かがobjc/swiftの間のジャグリングと関係があると思っていますが、実際にここで何が欠けていますか?Swiftのオプションのプロトコル動作の不一致
// In playground, given below:
@objc protocol SomePtotocol {
@objc optional func someMethod()
}
class SomeDelegate: NSObject, SomePtotocol {
}
class SomeController: NSObject {
var delegate: SomePtotocol = SomeDelegate()
}
// This works and compiles without error
let controller = SomeController()
controller.delegate.someMethod?() // No error, typed as '(() ->())?'
// But this fails to even compile ??
let delegate = SomeDelegate()
delegate.someMethod?() // Error: 'SomeDelegate' has no member 'someMethod'
私は両方が失敗または両方のパスなので、誰かが喜ばことができれば、この異常に私を啓発するか期待します。
あなたがiOSとSwiftを学んでいるなら、私は '@ objc'と' NSObject'を使わない**の使用を勧めます。構造体ができないことをしようとしない限り 'class'に' struct'を優先します。同様に、 'var'より' let'を優先します。このコードはSwiftyではありません。 – KPM
私はクラスの上に構造体があることを知っていますが、残念ながら、.NETのように私の頭を包み込むのに苦労している概念の別の領域でも、構造体よりもクラスを優先するよう教えられました。 –