2015-04-29 16 views
3

如果你像這樣定義如何在Objective-C中創建Swift對象?

@objc class Cat { 

} 

在迅速迅速類,你可以做

var c = Cat() 

但是你如何使用Objective-C一個Cat實例?

子類NSObject作品,因爲你就可以「黃金-初始化」,但是我們可以做到這一點沒有繼承的Objective-C類?

+0

也許[this](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_77)文章會幫助你 – user2340612

回答

2

最直接的方法是從NSObject子類Cat。如果你不能這樣做,你將需要做一個類方法或返回Cat的函數。

@objc class Cat { 
    class func create() -> Cat { 
     return Cat() 
    } 
} 
func CreateCat() -> Cat { 
    return Cat() 
} 


Cat *cat = [Cat create]; 
Cat *cat = CreateCat(); 
1

在現代的Objective-C,你可以調用的功能,如他們的屬性:

斯威夫特:

class func create() -> Cat { 
    return Cat() 
} 

的OBJ-C:

Cat *cat = Cat.create; 
+0

由於編譯器的實現方式,可以用這種方法調用類方法,但這樣做通常是不好的形式。點符號明確用於訪問ObjC中的屬性。請參閱「點語法是Accessor方法調用的簡潔替代方法」https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210 -CH5-SW5「點語法純粹是存取方法調用的一個方便包裝。」 –

0

可以在聲明+alloc虛擬類別(不需要實現它):

@interface Cat (Alloc) 
+ (instancetype)alloc; 
@end 

,然後你可以用它定期的alloc-INIT:

Cat *cat = [[Cat alloc] init]; 

都無需改變SWIFT CODE。