আমি কিছু পোস্ট অনুসন্ধান করেছি, আমি মনে করি আমি দ্রুতগতির অধীনে কোনও এক্সটেনশন লিখতে পারি না এবং এটি উদ্দেশ্য - সি কোড থেকে কল করতে পারি, তাই না?
@objc এর মত বৈশিষ্ট্যগুলি কেবল পদ্ধতি, শ্রেণি, প্রোটোকলকে সমর্থন করে?
আমি কিছু পোস্ট অনুসন্ধান করেছি, আমি মনে করি আমি দ্রুতগতির অধীনে কোনও এক্সটেনশন লিখতে পারি না এবং এটি উদ্দেশ্য - সি কোড থেকে কল করতে পারি, তাই না?
@objc এর মত বৈশিষ্ট্যগুলি কেবল পদ্ধতি, শ্রেণি, প্রোটোকলকে সমর্থন করে?
উত্তর:
আপনি একটি সুইফট এক্সটেনশন লিখতে পারেন এবং এটি উদ্দেশ্য-সি কোডে ব্যবহার করতে পারেন। এক্সকোড 6.1.1 দিয়ে পরীক্ষিত।
আপনাকে যা করতে হবে তা হ'ল:
সুইফটে আপনার এক্সটেনশনটি তৈরি করুন ( @objc
সুইফট ৩.০.৩ থেকে টিকা প্রয়োজন)
#import "ProjectTarget-Swift.h"
আপনার অবজেক্টিভ-সি ক্লাসে (যেখানে "প্রজেক্টট্যাজেট" এক্সকোড টার্গেট উপস্থাপন করে যার সাথে সুইফট এক্সটেনশনটি যুক্ত রয়েছে)
সুইফট এক্সটেনশন থেকে পদ্ধতিগুলি কল করুন
আমি জানতে পেরেছিলাম যে সুইফট 4.0.০ এ আমি @objc
আমার এক্সটেনশান কীওয়ার্ডের সামনে যুক্ত করতে হয়েছিল যাতে আমি ওবিজেসি ক্লাসটি প্রসারিত করছিলাম তা দিয়ে সুইফট এক্সটেনশন পদ্ধতিগুলি দৃশ্যমান হয়।
সংক্ষেপে:
ফাইল কনফিগারেশন সেটআপ:
CustomClass.h
CustomClass.m
CustomClassExtension.swift
কাস্টম ক্লাস এক্সটেনশনে:
@objc extension CustomClass
{
func method1()
{
...
}
}
আমার AppDelegate.m এ:
self.customClass = [[CustomClass alloc] init];
[self.customClass method1];
@nonobjc
এনেটেশন যুক্ত করতে হবে ।
এই দ্রবণটি সুইফট ২.২ এবং সুইফ্ট 3 এর জন্য কাজ করে । মনে রাখবেন যে ক্লাসগুলির জন্য কেবল এক্সটেনশনগুলি (স্ট্রাক্ট বা এনামগুলির জন্য নয়) অবজেক্টিভ-সি থেকে অ্যাক্সেসযোগ্য হবে।
import UIKit
extension UIColor {
//Custom colours
class func otherEventColor() -> UIColor {
return UIColor(red:0.525, green:0.49, blue:0.929, alpha:1)
}
}
তারপরে আপনার ObjC ফাইলে # পণ্য "ModDuleName-Swift.h" বিকাশ করুন।
সুইফট 4
extension UIColor {
// As of Swift 4.0.3, the @objc annotation is needed if you want to use the extension in Objective-C files
@objc
class func otherEventColor() -> UIColor {
return UIColor(red:0.525, green:0.49, blue:0.929, alpha:1)
}
}
public
দরকার আছে এমন কোনও কারণ আছে ? public
আমার জন্য পরিবর্তনকারী ছাড়াই সূক্ষ্ম কাজ করে । আমরা কি ধরে নিচ্ছি যে এক্সটেনশানটি একই প্রকল্পে নয় বরং অন্য প্রকল্প থেকে আমদানি হচ্ছে?
অন্যান্য উত্তরে কভার হিসাবে, উত্পন্ন সুইফট শিরোনামটি আমদানি করা বেশিরভাগ ক্ষেত্রেই কাজ করে ।
এর ব্যতিক্রম হ'ল যখন একটি ব্রিজযুক্ত ধরণের (যেমন এক্সটেনশানটি সংজ্ঞায়িত করা হয় String
এবং না NSString
) উপর সংজ্ঞা দেওয়া হয় । এই বিভাগগুলি স্বয়ংক্রিয়ভাবে তাদের উদ্দেশ্য-সি অংশগুলিতে ব্রিজ করা হবে না। এটি পেতে, আপনাকে হয় উদ্দেশ্য-সি প্রকারটি ব্যবহার করতে হবে (এবং আপনার স্যুইফ্ট কোডের সাথে রিটার্নের মানটি প্রেরণ করতে হবে as String
) বা সুইফট এবং অবজেক্টিভ-সি উভয় প্রকারের জন্য একটি এক্সটেনশনটি সংজ্ঞায়িত করতে হবে।
public extension NSString
। সংকলনের সময় আপনি যদি কোনও অমীমাংসিত শনাক্তকারী বা অনুরূপ ত্রুটি পেয়ে থাকেন তবে আপনি আবার let sVal = self as String
sVal
mclaughlinj
যদি আপনি মনে করেন যে আপনি সবকিছু সঠিকভাবে কনফিগার করেছেন (আপনার সুইফট সত্ত্বাকে @objcMeumber বা @objc দিয়ে চিহ্নিত করেছেন, ব্রিজিং শিরোনাম "ProductModuleName-Swift.h" ইত্যাদি আমদানি করেছেন) - তবে তবুও No visible @interface for 'FooClass' declares the selector 'fooSelector'
ত্রুটিটি পেয়েছে :
চেক করলে গণনার জমকালো অনুষ্ঠান হেডারের মধ্যে আপনার ইন্টারফেসগুলি দেখতে দ্বারা ctrl + cmd
এটি ক্লিক। যদি আপনি তা না করেন তবে এই প্রশ্নের আমার উত্তরটি দেখুন: সুইফট টু অবজেক্টিভ-সি শিরোনামে সুইফ্ট ক্লাস নেই