সুইফ্ট - কাস্ট ইন্ট ইন এনাম: ইনট


134

আমি সুইফ্টে খুব নতুন (এই সপ্তাহে শুরু হয়েছি) এবং আমি আমার অ্যাপ্লিকেশনটি সি-সি থেকে স্থানান্তরিত করছি। আমার কাছে অবজেক্টিভ-সিতে মূলত নিম্নলিখিত কোডগুলি রয়েছে যা ভাল কাজ করে:

typedef enum : int {
    MyTimeFilter1Hour = 1,
    MyTimeFilter1Day = 2,
    MyTimeFilter7Day = 3,
    MyTimeFilter1Month = 4,
} MyTimeFilter;

...

- (void)selectFilter:(id)sender
{
    self.timeFilterSelected = (MyTimeFilter)((UIButton *)sender).tag;
    [self closeAnimated:YES];
}

এটি সুইফটে অনুবাদ করার সময়, আমি নিম্নলিখিতগুলি করেছি:

enum MyTimeFilter : Int {
    case OneHour = 1
    case OneDay = 2
    case SevenDays = 3
    case OneMonth = 4
}

...

@IBAction func selectFilter(sender: AnyObject) {
    self.timeFilterSelected = (sender as UIButton).tag as MyTimeFilter
    self.close(true)
}

এটি করে আমি ত্রুটিটি পেয়েছি:

'ইন্ট' 'মাইটাইমফিল্টার' তে রূপান্তরযোগ্য নয়

আমার পদ্ধতির (ট্যাগ সম্পত্তি ব্যবহার করে) সেরা কিনা তা আমি জানি না, তবে যাইহোক আমার অ্যাপে বিভিন্ন জায়গায় এই জাতীয় placesালাই করা দরকার। এই ত্রুটি থেকে কীভাবে মুক্তি পাবেন সে সম্পর্কে কারও কি ধারণা আছে?

ধন্যবাদ!


2
এছাড়াও মনে রাখবেন পরিবর্তে (sender as UIButton), আপনি শুধু পদ্ধতি স্বাক্ষর একটি গ্রহণ করা পরিবর্তন করতে পারেন UIButtonপরিবর্তে AnyObject
বেন লেগিগেরো

উত্তর:


240

rawValueইনিশিয়ালাইজারটি ব্যবহার করুন : এটি স্বয়ংক্রিয়ভাবে এসগুলির জন্য উত্পন্ন একটি আর্টিলাইজার enum

self.timeFilterSelected = MyTimeFilter(rawValue: (sender as UIButton).tag)!

দেখুন: সুইফ্ট প্রোগ্রামিং ভাষা § গণনা


দ্রষ্টব্য: এই উত্তরটি পরিবর্তন হয়েছে। সুইফ্টের পূর্ববর্তী সংস্করণটি fromRaw()কাঁচা মানগুলিকে গণিত মানগুলিতে রূপান্তর করতে শ্রেণি পদ্ধতি ব্যবহার করে ।


আরও মনে রাখবেন যে প্রেরকের ট্যাগ যদি কোনও এনাম মানের সাথে মিল না করে তবে এটি এর কারণে ক্রাশ ঘটবে !
বেন লেগিগিরো

2
আমি বলব যে এক্ষেত্রে বাগ ধরার সেরা উপায় হ'ল ক্রাশ।
এক্সওয়াই

0

সুইফট 5

@IBAction func selectFilter(sender: AnyObject) {
    timeFilterSelected = MyTimeFilter(rawValue: sender.tag)
 }

আপনি কেন এই প্রশ্নের উত্তর দেওয়ার পরিবর্তে কোনও মন্তব্য করলেন না যে আপনি জানেন না যে কেন কেউ কাউকে নিম্নচোট করে, প্রশ্নটি পরীক্ষা করে এবং আপনার উত্তরটি আবার কেউ কেন নিম্নচাপে ফেলেছিল। তবে আমাকেও এটিকে নিম্নমুখী করতে হবে।
রিনিটিক

0

জেফারি থমাসের উত্তরটি বিশদভাবে বর্ণনা করা। সুরক্ষিত থাকার জন্য গার্ড স্টেটমেন্টটি ব্যবহারের আগে castালাইকে মোড়ক করুন, এটি ক্রাশগুলি এড়াতে পারবে

   @IBAction func selectFilter(sender: AnyObject) {
     guard let filter = MyTimeFilter(rawValue: (sender as UIButton).tag) else { 
        return
    }
        timeFilterSelected = filter
     }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.