我在 Swift
中有以下的 协议
:
protocol FooConvertible{
typealias FooType
init(foo: FooType)
}
我可以在类定义中让 Swift
类符合这个规范:
class Bar: FooConvertible {
var baz: String = ""
required init(foo: String){
baz = foo
}
}
到目前为止,一切都很好。然而,当我试图在扩展中使一个类符合它的时候问题就出现了(对于Cocoa类,这是我的唯一选择,因为我没有源代码):
class Baz {
var baz = ""
}
extension Baz: FooConvertible{
required convenience init(foo: String) { // Insists that this should be in the class definition
baz = foo
}
}
extension NSURL: FooConvertible{
required convenience init(foo: String) { // this also fails for the same reason
}
}
以前版本的语言中,这是有可能的,可以查看此处。
为什么会被移除呢?
这意味着所有XXXLiteralConvertible协议都被Cocoa类禁用了!
XXXLiteralConvertible
的讨论:Swift 1.1 中类的 StringLiteralConvertible。 - Mike S