বিশদ: এক্সকোড 8.1-এ সুইফট 3 কোড সহ উদ্দেশ্যমূলক-সি প্রকল্প
কাজ:
- অবজেক্ট-সি শ্রেণিতে সুইফট এনাম ব্যবহার করুন
- সুইফ্ট ক্লাসে উদ্দেশ্য-সি এনাম ব্যবহার করুন
সম্পূর্ণ নমুনা
1. উদ্দেশ্য-সি বর্গ যা সুইফট এনাম ব্যবহার করে
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
উদ্দেশ্য-সি কোডে সুইফট কোডটি সনাক্ত করুন
আমার নমুনায় আমি উদ্দেশ্য-সি-তে সুইফট কোড সনাক্ত করতে সুইফটকোড.হ ব্যবহার করি। এই ফাইলটি স্বয়ংক্রিয়ভাবে উত্পন্ন হয় (আমি কোনও প্রকল্পে এই শিরোলেখের ফাইলটির একটি দৈহিক অনুলিপি তৈরি করি নি) এবং আপনি কেবল এই ফাইলটির নাম সেট করতে পারেন:
যদি সংকলকটি আপনার শিরোনামের ফাইল সুইফট কোডটি খুঁজে না পায় তবে প্রকল্পটি সংকলনের চেষ্টা করুন।
২. সুইফ্ট ক্লাস যা অবজেক্টিভ-সি এনাম ব্যবহার করে
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
}
}
}
সুইফ্ট কোডে উদ্দেশ্য-সি কোড সনাক্ত করুন
ব্রিজিং হেডার ফাইলটি তৈরি করতে হবে। আপনি যখন উদ্দেশ্য-সি প্রকল্পে সুইফ্ট ফাইল যুক্ত করবেন বা সুইফ্ট প্রকল্পে কোড অব সিজেড এক্সকোড আপনাকে ব্রিজিং শিরোলেখ তৈরি করার পরামর্শ দেবে।
আপনি এখানে ব্রিজিং হেডার ফাইলের নাম পরিবর্তন করতে পারেন:
গণনার জমকালো অনুষ্ঠান-Header.h
#import "ObjcClass.h"
ব্যবহার
#import "SwiftCode.h"
...
[ObjcClass PrintEnumValues];
[SwiftClass PrintEnumValues];
[SwiftClass PrintEnumValue:ObjcEnumValue3];
ফলাফল
আরও নমুনা
সম্পূর্ণ ইন্টিগ্রেশন পদক্ষেপগুলি উদ্দেশ্য-সি এবং উপরে বর্ণিত সুইফট । এখন আমি অন্য কিছু কোড উদাহরণ লিখব।
অবজেক্টিভ-সি কোড থেকে সুইফ্ট ক্লাসে কল করুন
সুইফ্ট ক্লাস
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)")
}
}
উদ্দেশ্য-সি কোড (কলিং কোড)
SwiftClass *obj = [[SwiftClass alloc] initWithStringValue: @"Hello World!"];
[obj printValue];
NSString * str = obj.stringValue;
obj.stringValue = @"HeLLo wOrLd!!!";
ফলাফল
৪. সুইফ্ট কোড থেকে উদ্দেশ্য-সি শ্রেণিতে কল করুন class
উদ্দেশ্য-সি শ্রেণি (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
সুইফট কোড (কলিং কোড)
if let obj = ObjcClass(stringValue: "Hello World!") {
obj.printValue()
let str = obj.stringValue;
obj.stringValue = "HeLLo wOrLd!!!";
}
ফলাফল
5. উদ্দেশ্য-সি কোডে সুইফট এক্সটেনশন ব্যবহার করুন
সুইফট এক্সটেনশন
extension UIView {
static func swiftExtensionFunc() {
NSLog("UIView swiftExtensionFunc")
}
}
উদ্দেশ্য-সি কোড (কলিং কোড)
[UIView swiftExtensionFunc];
Sw. সুইফট কোডে অবজেক্টিভ-সি এক্সটেনশন ব্যবহার করুন
অবজেক্টিভ-সি এক্সটেনশান (ইউআইভিউএক্সটেনশন h)
#import <UIKit/UIKit.h>
@interface UIView (ObjcAdditions)
+ (void)objcExtensionFunc;
@end
UIViewExtension.m
@implementation UIView (ObjcAdditions)
+ (void)objcExtensionFunc {
NSLog(@"UIView objcExtensionFunc");
}
@end
সুইফট কোড (কলিং কোড)
UIView.objcExtensionFunc()
YourProjectName-Swift.h
XCode স্বয়ংক্রিয়ভাবে সংকলনের সময় আপনার জন্য তৈরি করার জন্য একটি জাদুকরী শিরোনাম ফাইল হওয়া উচিত (আপনি আসলে এটি প্রকল্প ব্রাউজারে দেখতে পাবেন না)। আপনি যেটি তৈরি করেছেন সেটিকে মুছে ফেলার চেষ্টা করুন এবং#import YourProjectName-Swift.h
আপনি যে ফাইলগুলিতে সুইফ্ট ক্লাসগুলি ব্যবহার করতে চান তাতে যুক্ত করুন।