我声明了以下协议。
SomeProtocol
现在,如果我想创建一个实现class SomeClass: SomeProtocol {
var objA: ClassOfTypeAProtocol?
var objB: ClassOfTypeBProtocol?
}
的类,我会做到这一点
SomeProtocol
我现在面临的问题是,我希望能够在没有var objB: TypeB? { get set }
的情况下创建实现objB
的类。我希望content
是可选的。我怎样才能做到这一点?
答案 0 :(得分:0)
在Objective-C中,您可以在协议中声明可选成员(方法/计算属性)。
在纯粹的Swift中,除非你使用@objc注释,否则这是不可能的(但在这种情况下,结构和枚举不能符合你的协议,所以它不是最好的方法)
那么,你怎么解决你的问题?
这些是您的协议
protocol TypeAProtocol { }
protocol TypeBProtocol { }
protocol SomeProtocol {
associatedtype TypeA: TypeAProtocol
associatedtype TypeB: TypeBProtocol
var objA: TypeA? { get set }
var objB: TypeB? { get set }
}
现在我们将SomeProtocol
拆分为3个协议
protocol SomeProtocolBase {
associatedtype TypeA: TypeAProtocol
associatedtype TypeB: TypeBProtocol
}
protocol SomeProtocolPartA: SomeProtocolBase {
var objA: TypeA? { get set }
}
protocol SomeProtocolPartB: SomeProtocolBase {
var objB: TypeB? { get set }
}
现在你可以写
了class ClassOfTypeAProtocol: TypeAProtocol { }
class ClassOfTypeBProtocol: TypeBProtocol { }
class SomeClass: SomeProtocolPartA {
typealias TypeA = ClassOfTypeAProtocol
typealias TypeB = ClassOfTypeBProtocol
var objA: ClassOfTypeAProtocol?
}