iOS
स्विफ्ट और ऑब्जेक्टिव-सी इंटरऑपरेबिलिटी
खोज…
स्विफ्ट में ऑब्जेक्टिव-सी क्लासेस का उपयोग करना
यदि आपके पास एक मौजूदा वर्ग है जिसका आप उपयोग करना चाहते हैं, तो चरण 2 का प्रदर्शन करें और फिर चरण 5 पर जाएं । (कुछ मामलों के लिए, मुझे एक स्पष्ट
#import <Foundation/Foundation.h
को एक पुरानी ObjC फ़ाइल में जोड़ना होगा)
चरण 1: उद्देश्य-सी कार्यान्वयन जोड़ें - .m
अपनी कक्षा में एक .m
फ़ाइल जोड़ें, और इसे CustomObject.m
नाम CustomObject.m
चरण 2: ब्रिजिंग हेडर जोड़ें
अपनी .m
फ़ाइल को जोड़ते समय, आप संभवतः एक प्रॉम्प्ट से टकराएंगे जो इस तरह दिखता है:
हाँ पर क्लिक करें!
यदि आपने प्रॉम्प्ट नहीं देखा है, या गलती से अपने ब्रिजिंग हेडर को हटा दिया है, तो अपने प्रोजेक्ट में एक नई .h
फ़ाइल जोड़ें और इसे नाम दें <#YourProjectName#>-Bridging-Header.h
कुछ स्थितियों में, विशेष रूप से जब ओबजेक फ्रेमवर्क के साथ काम करते हैं, तो आप स्पष्ट रूप से ऑब्जेक्टिव-सी क्लास नहीं जोड़ते हैं और एक्सकोड लिंकर को नहीं ढूंढ सकते हैं। इस स्थिति में, अपनी .h
फ़ाइल को ऊपर बताए अनुसार बनाएं, फिर सुनिश्चित करें कि आप अपने लक्ष्य की प्रोजेक्ट सेटिंग्स में उसका पथ लिंक करें जैसे:
ध्यान दें
$(SRCROOT)
मैक्रो का उपयोग करके अपनी परियोजना को लिंक करना सबसे अच्छा अभ्यास है ताकि यदि आप अपनी परियोजना को स्थानांतरित करते हैं, या दूरस्थ रेपो का उपयोग करके दूसरों के साथ काम करते हैं, तो भी यह काम करेगा। $(SRCROOT)
को उस निर्देशिका के रूप में सोचा जा सकता है जिसमें आपकी .xcodeproj फ़ाइल होती है। यह इस तरह लग सकता है:
$(SRCROOT)/Folder/Folder/<#YourProjectName#>-Bridging-Header.h
चरण 3: उद्देश्य-सी शीर्षक जोड़ें - .h
एक और .h
फ़ाइल जोड़ें और इसे CustomObject.h
नाम CustomObject.h
चरण 4: अपनी उद्देश्य-सी कक्षा बनाएँ
CustomObject.h
#import <Foundation/Foundation.h>
@interface CustomObject : NSObject
@property (strong, nonatomic) id someProperty;
- (void) someMethod;
@end
CustomObject.m
#import "CustomObject.h"
@implementation CustomObject
- (void) someMethod {
NSLog(@"SomeMethod Ran");
}
@end
चरण 5: ब्रिजिंग-हेडर में कक्षा जोड़ें
YourProject-Bridging-Header.h
:
#import "CustomObject.h"
चरण 6: अपनी वस्तु का उपयोग करें
SomeSwiftFile.swift
:
var instanceOfCustomObject: CustomObject = CustomObject()
instanceOfCustomObject.someProperty = "Hello World"
println(instanceOfCustomObject.someProperty)
instanceOfCustomObject.someMethod()
स्पष्ट रूप से आयात करने की कोई आवश्यकता नहीं है, वही ब्रिजिंग हेडर है।
उद्देश्य-सी में स्विफ्ट कक्षाओं का उपयोग करना
चरण 1: नई स्विफ्ट क्लास बनाएं
अपनी परियोजना में एक .swift
फ़ाइल जोड़ें, और इसे MySwiftObject.swift
नाम MySwiftObject.swift
MySwiftObject.swift
:
import Foundation
class MySwiftObject : NSObject {
var someProperty: AnyObject = "Some Initializer Val"
init() {}
func someFunction(someArg:AnyObject) -> String {
var returnVal = "You sent me \(someArg)"
return returnVal
}
}
चरण 2: स्विफ्ट फ़ाइलों को ओबीजीसी कक्षा में आयात करें
SomeRandomClass.m
:
#import "<#YourProjectName#>-Swift.h"
फ़ाइल: <#YourProjectName#>-Swift.h
को पहले से ही अपने प्रोजेक्ट में स्वचालित रूप से बनाया जाना चाहिए, भले ही आप इसे न देख सकें।
चरण 3: अपनी कक्षा का उपयोग करें
MySwiftObject * myOb = [MySwiftObject new];
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
myOb.someProperty = @"Hello World";
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
NSString * retString = [myOb someFunction:@"Arg"];
NSLog(@"RetString: %@", retString);
ध्यान दें:
1. कोडकंप्लीशन ठीक उसी तरह व्यवहार नहीं कर रहा था जैसा मैं करना चाहता हूं। मेरे सिस्टम पर, एक त्वरित बिल्ड w / "cmd + r" चलाने से स्विफ्ट को ओब्जेक्ट कोड और इसके विपरीत कुछ खोजने में मदद मिली।
2. यदि आप एक पुरानी परियोजना में .swift
फ़ाइल जोड़ते हैं और त्रुटि प्राप्त करते हैं: dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib
, पूरी तरह से Xcode को पुनः आरंभ करने का प्रयास करें ।
3. जबकि मूल रूप से स्विफ्ट 2.0 के बाद @objc
उपसर्ग का उपयोग करके उद्देश्य-सी में शुद्ध स्विफ्ट कक्षाओं का उपयोग करना संभव था, यह अब संभव नहीं है। मूल विवरण के लिए संपादित इतिहास देखें। यदि यह कार्यक्षमता भविष्य के स्विफ्ट संस्करणों में फिर से सक्रिय है, तो उत्तर तदनुसार अपडेट किया जाएगा।