Swift'te Objective-C Sınıflarını Kullanma
Kullanmak istediğiniz mevcut bir sınıfınız varsa, Adım 2'yi gerçekleştirin ve ardından Adım 5'e geçin . (Bazı durumlarda, #import <Foundation/Foundation.h
daha eski bir Objective-C Dosyasına açık bir şey eklemek zorunda kaldım .)
Adım 1: Hedef-C Uygulaması Ekleme - .m
.m
Sınıfınıza bir dosya ekleyin ve dosyayı adlandırın CustomObject.m
.
2. Adım: Köprüleme Üstbilgisi Ekleme
.m
Dosyanızı eklerken, muhtemelen şuna benzer bir istemle karşılaşırsınız:
Evet'i tıklayın !
İstemi görmediyseniz veya köprüleme başlığınızı yanlışlıkla sildiyseniz .h
, projenize yeni bir dosya ekleyin ve adlandırın <#YourProjectName#>-Bridging-Header.h
.
Bazı durumlarda, özellikle Objective-C çerçeveleriyle çalışırken, Objective-C sınıfını açıkça eklemezsiniz ve Xcode bağlayıcıyı bulamaz. Bu durumda, .h
yukarıda belirtildiği gibi bir dosya oluşturun , ardından yolunu hedefinizin proje ayarlarında aşağıdaki gibi bağladığınızdan emin olun:
Not:
Projenizi $(SRCROOT)
makro kullanarak bağlamak en iyi yöntemdir, böylece projenizi taşırsanız veya uzak bir depo kullanan başkalarıyla çalışırsanız, yine de çalışır. $(SRCROOT)
.xcodeproj dosyanızı içeren dizin olarak düşünülebilir. Şöyle görünebilir:
$(SRCROOT)/Folder/Folder/<#YourProjectName#>-Bridging-Header.h
Adım 3: Objective-C Üstbilgisi - .h ekle
Başka bir .h
dosya ekleyin ve adlandırın CustomObject.h
.
4. Adım: Objective-C Sınıfınızı oluşturun
İçinde CustomObject.h
#import <Foundation/Foundation.h>
@interface CustomObject : NSObject
@property (strong, nonatomic) id someProperty;
- (void) someMethod;
@end
İçinde CustomObject.m
#import "CustomObject.h"
@implementation CustomObject
- (void) someMethod {
NSLog(@"SomeMethod Ran");
}
@end
Adım 5: Köprüleme Başlığına Sınıf Ekleme
İçinde YourProject-Bridging-Header.h
:
#import "CustomObject.h"
6. Adım: Nesnenizi kullanın
İçinde SomeSwiftFile.swift
:
var instanceOfCustomObject = CustomObject()
instanceOfCustomObject.someProperty = "Hello World"
print(instanceOfCustomObject.someProperty)
instanceOfCustomObject.someMethod()
Açıkça içe aktarmaya gerek yoktur; köprüleme başlığı bunun için.
Swift Sınıflarını Objective-C'de Kullanma
Adım 1: Yeni Swift Sınıfı Oluşturun
.swift
Projenize bir dosya ekleyin ve dosyayı adlandırın MySwiftObject.swift
.
İçinde MySwiftObject.swift
:
import Foundation
@objc(MySwiftObject)
class MySwiftObject : NSObject {
@objc
var someProperty: AnyObject = "Some Initializer Val" as NSString
init() {}
@objc
func someFunction(someArg: Any) -> NSString {
return "You sent me \(someArg)"
}
}
Adım 2: Swift Dosyalarını ObjC Sınıfına Aktarın
İçinde SomeRandomClass.m
:
#import "<#YourProjectName#>-Swift.h"
Dosya: <#YourProjectName#>-Swift.h
göremeseniz bile projenizde otomatik olarak oluşturulmuş olmalıdır.
3. Adım: Sınıfınızı kullanın
MySwiftObject * myOb = [MySwiftObject new];
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
myOb.someProperty = @"Hello World";
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
NSString * retString = [myOb someFunctionWithSomeArg:@"Arg"];
NSLog(@"RetString: %@", retString);
Notlar:
Kod Tamamlama beklediğiniz gibi davranmıyorsa, ⌘⇧RXcode'un Swift içeriğinden bazı Objective-C kodlarını bulmasına yardımcı olmak için hızlı bir derleme çalıştırmayı deneyin veya bunun tersi de geçerlidir.
.swift
Eski bir projeye dosya ekler ve hatayı alırsanız, Xcode'udyld: Library not loaded: @rpath/libswift_stdlib_core.dylib
tamamen yeniden başlatmayı deneyin .
Başlangıçta NSObject
Objective-C tarafından görülebilen saf Swift sınıflarını (torunları değil ) kullanmak mümkün olsa da @objc
, bu artık mümkün değil. Şimdi, Objective-C'de görünür olmak için, Swift nesnesi ya uygun bir sınıf olmalıdır NSObjectProtocol
(bunu yapmanın en kolay yolu miras almaktır NSObject
) ya da gibi bir tamsayı türünde ham değeri olan bir enum
işaret olmalıdır . Bu kısıtlamalar olmaksızın Swift 1.x kodunun bir örneğinin düzenleme geçmişini görüntüleyebilirsiniz .@objc
Int
@objc