Niektóre dodatkowe tło oprócz już udzielonych odpowiedzi: Sposób Objective-C
+ (id)buttonWithType:(UIButtonType)buttonType
powraca id
. Był to "tradycyjny" sposób deklarowania "metody fabrycznej" w taki sposób, aby można ją było używać również z podklas. Nie ma typu cast konieczne
UIButton *button = [UIButton buttonWithType: UIButtonTypeSystem];
ponieważ id
można przekształcić w dowolnym wskaźnikiem Objective-C.
Teraz równoważny typ do id
w Swift jest AnyObject
, a powyższa metoda jest odwzorowywany
class func buttonWithType(buttonType: UIButtonType) -> AnyObject!
Swift jest znacznie bardziej rygorystyczne i robi nie niejawnie konwertować typy, dlatego zwracana wartość musi być oddanych do UIButton
wyraźnie:
var button = UIButton.buttonWithType(UIButtonType.System) as UIButton
"nowoczesnego" stosownych Oświadczam, że metody fabryczne to instancetype
(patrz na przykład http://nshipster.com/instancetype/ lub Would it be beneficial to begin using instancetype instead of id?).Prostym przykładem jest sposób
+ (instancetype)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc
NSString
który jest odwzorowany w SWIFT
class func stringWithCString(cString: CString, encoding enc: UInt) -> Self!
Self
jest typ obiektu, na którym jest wywoływana, tak że typ wartości
to NSString!
i typ zwrotu
NSMutableString.stringWithCString("bar", encoding: NSUTF8StringEncoding)
to NSMutableString!
. Nie jest wymagane odlewanie typu w Swift. W poniższym przykład Swift kompilator „wie”, że str
jest NSString
:
var str = NSString.stringWithCString("foo", encoding: NSUTF8StringEncoding)
var cs = str.UTF8String
Nagłówki ramowe Foundation używałeś instancetype
w wielu miejscach, ale nie wszędzie jeszcze gdzie jest to możliwe (jak w buttonWithType:
). Może to ulec poprawie w przyszłych wersjach pakietów SDK.
Wiele ** ** wasze pytania * Ciekawi * podstawowe pytania, które chciałem też zapytać (ale myślę, jesteś dwa lata przed mną w krzywa uczenia się.) Normalnie nie znajdziesz odpowiedzi na takie pytania, chyba że zapytasz na SO. – Honey