รายละเอียด:โครงการ Objective-C พร้อม Swift 3 code ใน Xcode 8.1
งาน:
- ใช้ swift enum ในคลาส -c
- ใช้วัตถุประสงค์ -c enum ในระดับที่รวดเร็ว
ตัวอย่างเต็ม
1. คลาส Objective-C ซึ่งใช้ Swift enum
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
ตรวจจับโค้ด Swift ในรหัส Objective-C
ในตัวอย่างของฉันฉันใช้ SwiftCode.h เพื่อตรวจจับรหัส Swift ใน Objective-C ไฟล์นี้สร้างขึ้นโดยอัตโนมัติ (ฉันไม่ได้สร้างสำเนาจริงของไฟล์ส่วนหัวนี้ในโครงการ) และคุณสามารถตั้งชื่อไฟล์นี้ได้เท่านั้น:
หากคอมไพเลอร์ไม่สามารถค้นหาไฟล์ส่วนหัวของคุณรหัส Swift ลองรวบรวมโครงการ
2. คลาส Swift ที่ใช้ Objective-C enum
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
}
}
}
ตรวจจับรหัส Objective-C ในรหัส Swift
คุณต้องสร้างไฟล์ส่วนหัวการเชื่อมต่อ เมื่อคุณเพิ่มไฟล์ Swift ในโครงการ Objective-C หรือไฟล์ Objective-C ในโครงการ Swift Xcode จะแนะนำให้คุณสร้างส่วนหัวการเชื่อมต่อ
คุณสามารถเปลี่ยนชื่อไฟล์ส่วนหัวบริดจ์ได้ที่นี่:
Bridging-Header.h
#import "ObjcClass.h"
การใช้
#import "SwiftCode.h"
...
[ObjcClass PrintEnumValues];
[SwiftClass PrintEnumValues];
[SwiftClass PrintEnumValue:ObjcEnumValue3];
ผลลัพธ์
ตัวอย่างเพิ่มเติม
บูรณาการตามขั้นตอนที่ Objective-C และสวิฟท์กล่าวไว้ข้างต้น ตอนนี้ฉันจะเขียนตัวอย่างรหัสอื่น ๆ
3. เรียกคลาส Swift จากรหัส Objective-c
คลาสที่รวดเร็ว
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 (รหัสโทร)
SwiftClass *obj = [[SwiftClass alloc] initWithStringValue: @"Hello World!"];
[obj printValue];
NSString * str = obj.stringValue;
obj.stringValue = @"HeLLo wOrLd!!!";
ผลลัพธ์
4. เรียกคลาส Objective-c จาก Swift code
คลาส Objective-C (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 (รหัสโทร)
if let obj = ObjcClass(stringValue: "Hello World!") {
obj.printValue()
let str = obj.stringValue;
obj.stringValue = "HeLLo wOrLd!!!";
}
ผลลัพธ์
5. ใช้ Swift extension ในรหัส Objective-c
ส่วนขยายที่รวดเร็ว
extension UIView {
static func swiftExtensionFunc() {
NSLog("UIView swiftExtensionFunc")
}
}
รหัส Objective-C (รหัสโทร)
[UIView swiftExtensionFunc];
6. ใช้ Objective-c extension ในรหัส swift
Objective-C extension (UIViewExtension.h)
#import <UIKit/UIKit.h>
@interface UIView (ObjcAdditions)
+ (void)objcExtensionFunc;
@end
UIViewExtension.m
@implementation UIView (ObjcAdditions)
+ (void)objcExtensionFunc {
NSLog(@"UIView objcExtensionFunc");
}
@end
รหัส Swift (รหัสโทร)
UIView.objcExtensionFunc()
YourProjectName-Swift.h
ควรเป็นไฟล์ส่วนหัวเวทย์มนตร์ที่ Xcode สร้างขึ้นให้คุณโดยอัตโนมัติระหว่างการรวบรวม (คุณจะไม่เห็นมันในเบราว์เซอร์โครงการ) ลองลบไฟล์ที่คุณสร้างขึ้นและเพิ่ม#import YourProjectName-Swift.h
ไฟล์ที่คุณต้องการใช้คลาส Swift