আমি সুইফটে একটি লাইব্রেরি লিখেছি এবং আমি এটি আমার বর্তমান প্রজেক্টে অবজেক্টিভ-সি-তে লিখে আমদানি করতে পারিনি।
এটি আমদানির কোনও উপায় আছে কি?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
আমি সুইফটে একটি লাইব্রেরি লিখেছি এবং আমি এটি আমার বর্তমান প্রজেক্টে অবজেক্টিভ-সি-তে লিখে আমদানি করতে পারিনি।
এটি আমদানির কোনও উপায় আছে কি?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
উত্তর:
আপনার আমদানি করা দরকার TargetName-Swift.h । লক্ষ্য করুন যে এটি লক্ষ্য নাম - অন্যান্য উত্তরগুলি বর্গের নামটি ব্যবহার করার ক্ষেত্রে ভুল করে।
এই একক ফাইলটি একটি স্বয়ংক্রিয় জেনারেটেড শিরোলেখ যা আপনার প্রকল্পের সমস্ত সুইফ্ট শ্রেণীর জন্য অবজেক্টিভ সি ইন্টারফেসগুলি সংজ্ঞায়িত করে যা হয় @objcবা এর সাথে উত্তরাধিকারসূত্রে লিখিত হয় NSObject।
বিবেচ্য বিষয়:
যদি আপনার টার্গেট নামের স্পেস থাকে তবে এটিকে আন্ডারস্কোর দিয়ে প্রতিস্থাপন করুন (উদাঃ My Projectহয়ে যায় My_Project-Swift.h)
যদি আপনার লক্ষ্যটি একটি কাঠামো হয় তবে আপনার আমদানি করা দরকার <TargetName/TargetName-Swift.h>
আপনার সুইফট ফাইলটি লক্ষ্যটির সদস্য কিনা তা নিশ্চিত করুন
অ্যাপল ওয়েবসাইট থেকে নির্দেশাবলী:
একই কাঠামো থেকে অবজেক্ট-সি তে সুইফট কোড আমদানি করতে
অধীনে সেটিংস বিল্ড , ইন প্যাকেজিং , নিশ্চিত করুন সংজ্ঞায়িত মডিউল যে ফ্রেমওয়ার্ক লক্ষ্য জন্য সেটিং সেট করা হয় হ্যাঁ । এই কাঠামোটি লক্ষ্যবস্তুতে এই বাক্য গঠনটি ব্যবহার করে যথাযথ নামগুলি স্থির করে framework কাঠামোর লক্ষ্য থেকে যে কোনও উদ্দেশ্য-সি .এম ফাইলের মধ্যে সেই ফ্রেমওয়ার্ক লক্ষ্য থেকে সুইফট কোডটি আমদানি করুন:
# আমদানি
পুনর্বিবেচনাসমূহ:
আপনি কেবলমাত্র .m ফাইলগুলিতে "ProductName-Swift.h" আমদানি করতে পারেন ।
আপনার টার্গেটে থাকা সুইফ্ট ফাইলগুলি এই আমদানির বিবৃতি সম্বলিত উদ্দেশ্য-সি .এম ফাইলগুলিতে দৃশ্যমান হবে।
চক্রীয় রেফারেন্স এড়ানোর জন্য, সুইফটকে কোনও উদ্দেশ্য-সি শিরোনাম ফাইলটিতে আমদানি করবেন না। পরিবর্তে, আপনি একটি উদ্দেশ্য-সি শিরোনামে এটি ব্যবহার করার জন্য একটি সুইফ্ট বর্গ ঘোষণা করতে পারেন। নোট করুন আপনি উদ্দেশ্য-সি তে একটি সুইফ্ট ক্লাস সাবক্লাস করতে পারবেন না।

NSObject!!! আপনি কেবল তাত্ক্ষণিকভাবে একটি class Blah দ্রুত ঘোষণা করতে এবং এটি কাজ করতে পারবেন না । এটি হওয়া দরকারclass Blah : NSObject
করণীয় এখানে:
উদ্দেশ্য-সি তে একটি নতুন প্রকল্প তৈরি করুন
একটি নতুন .swiftফাইল তৈরি করুন
আপনার এক্সকোড প্রকল্প ফাইলটিতে ক্লিক করুন
বিল্ড সেটিংসে ক্লিক করুন
এই অনুসন্ধান বার অনুসন্ধান এবং সংজ্ঞায়িত মডিউল ।
হ্যাঁ মান পরিবর্তন করুন ।
পণ্য মডিউল নাম অনুসন্ধান করুন ।
আপনার প্রকল্পের নামে মান পরিবর্তন করুন।
অ্যাপের প্রতিনিধিতে, নিম্নলিখিতগুলি যুক্ত করুন: #import "YourProjectName-Swift.h"
দ্রষ্টব্য: আপনি যখনই আপনার সুইফ্ট ফাইলটি ব্যবহার করতে চান আপনাকে অবশ্যই নিম্নলিখিত লাইনটি আমদানি করতে হবে:
#import "YourProjectName-Swift.h"
Defines moduleমধ্যে Build settingsথেকে Yesআমার জন্য কি জিনিষ সংশোধন করা হয়েছে!
YourProjectNameমধ্যে #import "YourProjectName-Swift.h"পদক্ষেপ 8. দরকারী থেকে প্রকল্পের নাম হবে যদি আপনার প্রকল্পের নামে বিশেষ অক্ষর রয়েছে এবং আপনি কিভাবে নিশ্চিত ঠিক আপনি এটা ফরম্যাট করা উচিত নয়।
আপনি যদি কোকোয়াপড ব্যবহার করছেন এবং কোনও ওজেসি প্রকল্পে একটি সুইফট পড ব্যবহার করার চেষ্টা করছেন তবে আপনি কেবল নিম্নলিখিতটি করতে পারেন:
@import <FrameworkName>;
অনুসন্ধান আপনার প্রকল্পের ফাইলে বিল্ড সেটিংসে যান এবং জেনারেট করা ইন্টারফেস শিরোলেখ নাম "উদ্দেশ্য সি । যে সম্পত্তির মূল্য যে নামটি অন্তর্ভুক্ত করা উচিত নয়।
যদি আপনার "প্রোডাক্ট মডিউল নাম" বৈশিষ্ট্য (উপরের সম্পত্তিটি ডিফল্ট অনুসারে নির্ভর করে) আপনি পরীক্ষা / ডিবাগ / রিলিজ / ইত্যাদির জন্য সংকলন করেন কিনা তার উপর নির্ভর করে (যেমন এটি আমার ক্ষেত্রে হয়) তবে এই সম্পত্তিটিকে তার থেকে আলাদা করে তুলুন একটি কাস্টম নাম সেট করে বিভিন্নতা।
যদি Swiftফাইলটি সঠিকভাবে Objective-cনা হয় তবে ভিতরে ফাইল আমদানি করা এই ত্রুটির কারণ হতে পারে import।
দ্রষ্টব্য: আপনাকে বাইরের বাইরে সুইফট ফাইলগুলি আমদানি করতে হবে না, আপনাকে কেবল একটি ফাইল আমদানি করতে হবে যা সুইফ্ট ফাইলগুলির যত্ন নেয়।
আপনি যখন তৈরি উপরে / প্রতিলিপি করা সুইফট ফাইল ভিতরে উদ্দেশ্য সি প্রকল্পের । এটি স্বয়ংক্রিয়ভাবে একটি ব্রিজিং শিরোনাম তৈরি করত।
পরীক্ষা করে দেখুন Objective-C Generated Interface Header Nameএ Targets -> Build Settings।
উপরের ভিত্তিতে, আমি KJExpandable-Swift.hএটি যেমনটি আমদানি করব ।
আপনার হ'ল TargetName-Swift.h, যেখানে TargetNameআপনার প্রকল্পের নাম বা অন্য টার্গেটের উপর ভিত্তি করে পৃথক হওয়া আপনার এতে যুক্ত এবং চালিত হতে পারে।
আমার টার্গেটের নীচে যেমন রয়েছে KJExpandableতেমনি এটিKJExpandable-Swift.h

প্রথম ধাপ:-
নির্বাচন প্রকল্পের উদ্দিষ্ট -> সেটিং বিল্ড -> Search ( 'নির্ধারণ') -> নির্ধারণ মডিউল আপডেট মান কোন থেকে হ্যাঁ
"মডিউলটি সংজ্ঞায়িত করুন": হ্যাঁ ।
"সর্বদা এম্বেড স্ট্যান্ডার্ড গ্রন্থাগারগুলি": হ্যাঁ ।
"উদ্দেশ্য-সি সামঞ্জস্যতা শিরোনাম ইনস্টল করুন": হ্যাঁ ।
দ্বিতীয় ধাপ:-
নীচে হিসাবে উদ্দেশ্য সি ".h" ফাইলটিতে সুইফট ফাইল শ্রেণি যুক্ত করুন
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
উদ্দেশ্য প্রকল্প ".ম" ফাইলটিতে 'প্রকল্পের নাম (আপনার প্রকল্পের নাম) -সুইফট।' আমদানি করুন
//TestViewController.m
#import "TestViewController.h"
/*import ProjectName-Swift.h file to access Swift file here*/
#import "ProjectName-Swift.h"
যদি আপনি একই কাঠামোর মধ্যে আপনার উদ্দেশ্য-সি ফাইলগুলিতে সুইফট কোড আমদানি করেন তবে একটি সাবধানতা রয়েছে । ফ্রেমওয়ার্কের নাম এবং কোণ বন্ধনী নির্দিষ্ট করে আপনাকে এটি করতে হবে:
#import <MyFramework/MyFramework-Swift.h>
MyFrameworkএখানে "পণ্য মডিউল নাম" বিল্ড সেটিংস ( PRODUCT_NAME = MyFramework)।
কেবল যুক্ত করা #import "MyFramework-Swift.h"কাজ করবে না। আপনি নির্মিত পণ্য তালিকা পরীক্ষা থাকেন (আগে যেমন একটি #importযোগ করা হয়, তাই আপনি অন্তত একটি সফল বিল্ড লক্ষ্য মধ্যে কিছু সুইফট কোড দিয়ে ছিল), তারপর আপনি এখনও ফাইল দেখতে পাবেন MyFramework-Swift.hমধ্যে Headersডিরেক্টরি।
আপনার যদি সুইফট 4-এ কোনও প্রকল্প তৈরি করা হয় এবং তারপরে উদ্দেশ্যমূলক-সি ফাইলগুলি যুক্ত করা থাকে তবে এটি এটি করুন:
@objcMembers
public class MyModel: NSObject {
var someFlag = false
func doSomething() {
print("doing something")
}
}
তথ্যসূত্র: https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
একই প্রকল্পে সুইফট এবং উদ্দেশ্য সি সম্পর্কে প্রাক-প্রকাশের নোটগুলি চেকআউট করুন
আপনার আমদানি করা উচিত
#import "SCLAlertView-Swift.h"
The name of this header is your product module name followed by adding "-Swift.h".সুতরাং এটি আপনার লেখার মতো শ্রেণীর নাম নয়, তবে আপনার পণ্যের মডিউলটির নাম এবং এটি কেবল একটি নির্দিষ্ট একটি নয়, সমস্ত সুইফট ফাইল আমদানির যত্ন নেয়
জন্য অনুসন্ধান করুন "উদ্দেশ্য সি জেনারেট করা ইন্টারফেস শিরোলেখ নাম" লক্ষ্য আপনি বিল্ড করার চেষ্টা করছেন সেটিং Build এ (ধরুন এটা দিন MyApp-Swift.h), এবং আপনি এই ব্যবহারটি নির্ধারণ মান আমদানি (#import "MyApp-Swift.h" ) উৎস ফাইলে যেখানে আপনি অ্যাক্সেস করার চেষ্টা করছেন আপনার সুইফট APIs
এই ক্ষেত্রের জন্য ডিফল্ট মান $(SWIFT_MODULE_NAME)-Swift.h । আপনি যদি "উদ্দেশ্য-সি উত্পন্ন ইন্টারফেস শিরোনামের নাম" সেটিংয়ের মান ক্ষেত্রে ডাবল-ক্লিক করেন তবে আপনি এটি দেখতে পাবেন।
এছাড়াও, যদি আপনার মডিউলের নামে ড্যাশ থাকে (তবে এটি বলা যাক My-App), তবে $(SWIFT_MODULE_NAME)সমস্ত ড্যাশগুলিকে আন্ডারস্কোর দিয়ে প্রতিস্থাপন করা হবে। সুতরাং আপনি যোগ করতে হবে #import "My_App-Swift.h"।
আপনি যদি সুইফট ব্যবহার করতে চান ফাইলটি অবজেক্টিভ-সি শ্রেণিতে , তাই এক্সকোড 8 থেকে আপনি নীচের পদক্ষেপগুলি অনুসরণ করতে পারেন:
আপনি যদি প্রকল্পটি উদ্দেশ্য-সিতে তৈরি করেছেন:
এটি সংকলন করুন এবং যদি এটি লিঙ্কারের ত্রুটি তৈরি করে যেমন: আর্কিটেকচার x86_64 বা আর্মভ 7 এর জন্য পূর্ববর্তী ফাইলগুলির (2.0) তুলনায় সুইফট ভাষার নতুন সংস্করণ (3.0) এর সাথে সংকলিত
আপনার আরও একটি পরিবর্তন করুন
বিল্ড এবং রান।
ড্যাশ এবং আন্ডারস্কোরগুলি সম্পর্কে সতর্ক থাকুন, সেগুলি মিশ্রিত হতে পারে এবং আপনার প্রকল্পের নাম এবং লক্ষ্যটির নাম SWIFT_MODULE_NAME এর মতো হবে না।
#import <TargetName-Swift.h>
আপনি কিবোর্ড # ইমপোর্ট <থেকে প্রবেশ করার সময় দেখতে পাবেন এবং স্বয়ংক্রিয়ভাবে এক্সকোড আপনাকে পরামর্শ দেবে।
প্রকল্পের ভিতরে .PCH ফাইলটি সন্ধান করুন। এবং তারপরে যোগ করুন #import "YourProjectName-Swift.h"এটি ক্লাস শিরোনাম আমদানি করবে। যাতে আপনাকে নির্দিষ্ট ফাইলটিতে আমদানি করতে না হয়।
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "YourProjectName-Swift.h"
#endif