সুইফট সহ ইসকাইন্ডঅফক্লাস ব্যবহার করা হচ্ছে


231

আমি কিছুটা সুইফট ল্যাং বাছাই করার চেষ্টা করছি এবং আমি কীভাবে নীচের উদ্দেশ্য-সিটিকে সুইফটে রূপান্তর করব তা ভাবছি:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];

    UITouch *touch = [touches anyObject];

    if ([touch.view isKindOfClass: UIPickerView.class]) {
      //your touch was in a uipickerview ... do whatever you have to do
    }
}

আরও বিশেষভাবে আমার isKindOfClassনতুন সিনট্যাক্সে কীভাবে ব্যবহার করবেন তা জানতে হবে ।

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

    ???

    if ??? {
        // your touch was in a uipickerview ...

    }
}

উত্তর:


480

সঠিক সুইফ্ট অপারেটরটি হ'ল is:

if touch.view is UIPickerView {
    // touch.view is of type UIPickerView
}

অবশ্যই, যদি আপনারও নতুন ধ্রুবককে দৃষ্টিভঙ্গি দেওয়ার প্রয়োজন হয়, তবে if let ... as? ...কেভিন বলেছেন যে বাক্যটি আপনার ছেলে। তবে যদি আপনার মানটির প্রয়োজন হয় না এবং কেবল প্রকারটি পরীক্ষা করতে হয় তবে আপনার isঅপারেটরটি ব্যবহার করা উচিত ।


2
পাশাপাশি সুইফট 3 এর সাথেও কাজ করে!
footyapps27

পাশাপাশি সুইফট 4.2 এর সাথেও কাজ করে!
রবি

বিভিন্ন শ্রেণীর ধরণের পরীক্ষা করতে আপনি কীভাবে এটি একটি সুইচ স্টেটমেন্টে করতে পারেন?
বিগবয় 1313

132
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

    super.touchesBegan(touches, withEvent: event)
    let touch : UITouch = touches.anyObject() as UITouch

    if touch.view.isKindOfClass(UIPickerView)
    {

    }
}

সম্পাদন করা

@ কেভিনের উত্তরে যেমন উল্লেখ করা হয়েছে , সঠিক উপায় হ'ল alচ্ছিক ধরণের কাস্ট অপারেটর ব্যবহার করা as?। আপনি বিভাগের Optional Chainingসাব বিভাগে এটি সম্পর্কে আরও পড়তে পারেন Downcasting

সম্পাদনা 2

ব্যবহারকারী @KPM- এর অন্যান্য উত্তরে যেমন উল্লেখ করা হয়েছে, অপারেটরটি ব্যবহার করা এটি isকরার সঠিক উপায়।


আমারে সুপার ভুলে গেছি। আপনি : UITouchএটির মধ্যে এটিও বের করতে পারেন , কারণ প্রকারের অনুমানটি জানতে পারবেন এটি as UITouchকাস্ট দ্বারা কী তা
ম্যালকম জার্ভিস

পছন্দ করেছেন
রুই পেরেস

4
অন্যান্য ব্যবহারকারীর জবাব আপনার নিজের মধ্যে রেখে চুরি করা স্বাদে কম।
devios1

কাজ করে না পরামর্শ UIPickerView.self। এটা কি ঠিক?
ভাইচাস্লাভ গের্চিকভ

49

আপনি চেকটি একত্রিত করতে পারেন এবং একটি বিবৃতিতে কাস্ট করতে পারেন:

let touch = object.anyObject() as UITouch
if let picker = touch.view as? UIPickerView {
    ...
}

তারপরে আপনি ব্লকের pickerমধ্যে ব্যবহার করতে পারেন if


3
এটি "আরও সঠিক" উত্তর কারণ এটি সুইফটকে 'হিসাবে ব্যবহার করে?' অপারেটর. ডকুমেন্টেশনে উল্লেখ করা হয়েছে যে "অবজেক্টিভ-সি-তে, আপনি কোনও নির্দিষ্ট শ্রেণীর প্রকারের কি না তা পরীক্ষা করার জন্য আইকনডফফ্লাস: পদ্ধতিটি ব্যবহার করেন এবং একটি নির্দিষ্ট প্রোটোকলের সাথে কোনও উপাদান উপযুক্ত কিনা তা যাচাই করার জন্য পদ্ধতিটি সুইফটে, আপনি এটি সম্পাদন করেন অপারেটর ব্যবহার করে কোনও প্রকারের জন্য পরীক্ষা করা অপারেটর ব্যবহার করে বা অপারেটর হিসাবে সেই ধরণের ডাউনকাস্ট করার জন্য? " অ্যাপল ডকুমেন্টেশন
অ্যাডাম ফক্স

এটি সুইফট-এ কিঙ্গিং অফক্লাস সম্পাদন করার সঠিক উপায়। আপনি যদি কেবলমাত্র ব্লকটি প্রবেশ করুন কেবলমাত্র যদি অবজেক্টটি ক্লাসের ইউআইপিকারকার ভিউতে থাকে! দুর্দান্ত উত্তর!
ফ্লোরিয়ান বুরেল

কেবলমাত্র এটিই উল্লেখ করতে চেয়েছিলাম যে যদি আপনাকে কেবল চেকটি করতে হয় এবং পরবর্তী 'যদি' ব্লকটিতে 'পিকার' ব্যবহার না করা হয় তবে আপনি ব্যবহার করতে চান: যদি _ = টাচ ভিউ হিসাবে দেখা যায়? ইউআইপিকারভিউ {...}
অ্যাডাম ফ্রিম্যান

@ অ্যাডামফ্রিমন সেক্ষেত্রে আপনি আরও ভাল ব্যবহার করতে চাইবেনif touch.view is UIPickerView {...}
কেভিন

এবং আমি নিশ্চিত নই যে ভাষাটি প্রথম ঘোষণার কয়েক দিন পরে এই প্রশ্নটি জিজ্ঞাসা করা হয়েছিল ঠিক সেই স্থানেই ছিল isবা _অস্তিত্ব রয়েছে।
কেভিন

1

আমি ব্যবহার করব:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

    super.touchesBegan(touches, withEvent: event)
    let touch : UITouch = touches.anyObject() as UITouch

    if let touchView = touch.view as? UIPickerView
    {

    }
}

-3

নতুন সুইফট 2 সিনট্যাক্স ব্যবহার করে আরেকটি পদ্ধতি হ'ল গার্ডটি ব্যবহার করা এবং এটি সমস্ত এক শর্তাধীন বাসা বাঁধে।

guard let touch = object.AnyObject() as? UITouch, let picker = touch.view as? UIPickerView else {
    return //Do Nothing
}
//Do something with picker
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.