Ayrıntılar: Xcode 8.1'de Swift 3 kodu ile Objective-C projesi
Görevler:
- Objektif-c sınıfında hızlı numaralandırma kullanma
- Hızlı sınıfta objektif-c enum kullanma
TAM ÖRNEK
1. Swift enum kullanan Objective-C sınıfı
ObjcClass.h
#import <Foundation/Foundation.h>
typedef NS_ENUM(NSInteger, ObjcEnum) {
ObjcEnumValue1,
ObjcEnumValue2,
ObjcEnumValue3
};
@interface ObjcClass : NSObject
+ (void) PrintEnumValues;
@end
ObjcClass.m
#import "ObjcClass.h"
#import "SwiftCode.h"
@implementation ObjcClass
+ (void) PrintEnumValues {
[self PrintEnumValue:SwiftEnumValue1];
[self PrintEnumValue:SwiftEnumValue2];
[self PrintEnumValue:SwiftEnumValue3];
}
+ (void) PrintEnumValue:(SwiftEnum) value {
switch (value) {
case SwiftEnumValue1:
NSLog(@"-- SwiftEnum: SwiftEnumValue1");
break;
case SwiftEnumValue2:
case SwiftEnumValue3:
NSLog(@"-- SwiftEnum: long value = %ld", (long)value);
break;
}
}
@end
Objective-C kodunda Swift kodunu algılama
Örneğimde, Objective-C Swift kodu algılamak için SwiftCode.h kullanın. Bu dosya otomatik olarak oluşturulur (bir projede bu başlık dosyasının fiziksel bir kopyasını oluşturmadım) ve yalnızca bu dosyanın adını ayarlayabilirsiniz:
Derleyici başlık dosyanızı Swift kodu bulamazsa, projeyi derlemeye çalışın.
2. Objective-C enum kullanan Swift sınıfı
import Foundation
@objc
enum SwiftEnum: Int {
case Value1, Value2, Value3
}
@objc
class SwiftClass: NSObject {
class func PrintEnumValues() {
PrintEnumValue(.Value1)
PrintEnumValue(.Value2)
PrintEnumValue(.Value3)
}
class func PrintEnumValue(value: ObjcEnum) {
switch value {
case .Value1, .Value2:
NSLog("-- ObjcEnum: int value = \(value.rawValue)")
case .Value3:
NSLog("-- ObjcEnum: Value3")
break
}
}
}
Swift kodundaki Objective-C kodunu algılama
Köprüleme başlık dosyası oluşturmanız gerekir. Objective-C projesine Swift dosyasını veya hızlı Xcode projesinde Objective-C dosyasını eklediğinizde köprüleme üstbilgisi oluşturmanızı önerir.
Köprüleme üstbilgisi dosya adını buradan değiştirebilirsiniz:
Köprü Oluşturma-Header.h
#import "ObjcClass.h"
kullanım
#import "SwiftCode.h"
...
[ObjcClass PrintEnumValues];
[SwiftClass PrintEnumValues];
[SwiftClass PrintEnumValue:ObjcEnumValue3];
Sonuç
DAHA FAZLA ÖRNEK
Yukarıda açıklanan tam entegrasyon adımları Objective-c ve Swift . Şimdi başka kod örnekleri yazacağım.
3. Objective-c kodundan Swift sınıfını çağırın
Swift sınıfı
import Foundation
@objc
class SwiftClass:NSObject {
private var _stringValue: String
var stringValue: String {
get {
print("SwiftClass get stringValue")
return _stringValue
}
set {
print("SwiftClass set stringValue = \(newValue)")
_stringValue = newValue
}
}
init (stringValue: String) {
print("SwiftClass init(String)")
_stringValue = stringValue
}
func printValue() {
print("SwiftClass printValue()")
print("stringValue = \(_stringValue)")
}
}
Objective-C kodu (çağrı kodu)
SwiftClass *obj = [[SwiftClass alloc] initWithStringValue: @"Hello World!"];
[obj printValue];
NSString * str = obj.stringValue;
obj.stringValue = @"HeLLo wOrLd!!!";
Sonuç
4. Swift kodundan Objective-c sınıfını çağırın
Objective-C sınıfı (ObjcClass.h)
#import <Foundation/Foundation.h>
@interface ObjcClass : NSObject
@property NSString* stringValue;
- (instancetype) initWithStringValue:(NSString*)stringValue;
- (void) printValue;
@end
ObjcClass.m
#import "ObjcClass.h"
@interface ObjcClass()
@property NSString* strValue;
@end
@implementation ObjcClass
- (instancetype) initWithStringValue:(NSString*)stringValue {
NSLog(@"ObjcClass initWithStringValue");
_strValue = stringValue;
return self;
}
- (void) printValue {
NSLog(@"ObjcClass printValue");
NSLog(@"stringValue = %@", _strValue);
}
- (NSString*) stringValue {
NSLog(@"ObjcClass get stringValue");
return _strValue;
}
- (void) setStringValue:(NSString*)newValue {
NSLog(@"ObjcClass set stringValue = %@", newValue);
_strValue = newValue;
}
@end
Swift kodu (çağrı kodu)
if let obj = ObjcClass(stringValue: "Hello World!") {
obj.printValue()
let str = obj.stringValue;
obj.stringValue = "HeLLo wOrLd!!!";
}
Sonuç
5. Objective-c kodunda Swift uzantısını kullanma
Swift uzantısı
extension UIView {
static func swiftExtensionFunc() {
NSLog("UIView swiftExtensionFunc")
}
}
Objective-C kodu (çağrı kodu)
[UIView swiftExtensionFunc];
6. Hızlı kodda Objective-c uzantısını kullanma
Objective-C uzantısı (UIViewExtension.h)
#import <UIKit/UIKit.h>
@interface UIView (ObjcAdditions)
+ (void)objcExtensionFunc;
@end
UIViewExtension.m
@implementation UIView (ObjcAdditions)
+ (void)objcExtensionFunc {
NSLog(@"UIView objcExtensionFunc");
}
@end
Swift kodu (çağrı kodu)
UIView.objcExtensionFunc()
YourProjectName-Swift.h
Xcode'un derleme sırasında sizin için otomatik olarak oluşturduğu sihirli bir başlık dosyası olmalıdır (aslında proje tarayıcısında görmezsiniz). Oluşturduğunuz dosyayı silmeyi deneyin#import YourProjectName-Swift.h
ve Swift sınıflarını kullanmak istediğiniz dosyalara ekleyin .