Mam następujący w Swift
:Wykonywanie Swift klasę zgodne z protokołem, który wymaga init
protocol FooConvertible{
typealias FooType
init(foo: FooType)
}
mogę zrobić Swift
klas dostosowania się do niej w definicji klasy:
class Bar: FooConvertible {
var baz: String = ""
required init(foo: String){
baz = foo
}
}
Jak na razie dobrze. Jednak problem pojawia się, gdy staram się klasa z nim zgodne w rozszerzeniu (z klas kakao, to moja jedyna opcja, ponieważ nie mam źródła):
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
}
}
Ten used to be possible w poprzednie wersje językowe
Jaki był powód usunięcia?
Oznaczałoby to, że wszystkie XXXLiteralConvertible Protocols są zakazane na zajęciach z kakao!
Fakt ten został jasno przedstawiony przez [dokumentację] (https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html#//apple_ref/doc/ uid/TP40014097-CH24-XID_235). – CodaFi
Gdzie jest napisane, że możesz dodawać wygody do klas Swift, ale nie do klas Cocoa? – cfischer
Nie wolno ci także tego robić. Twój przykład nie kompiluje się. – CodaFi