সম্পর্কিত মানগুলির সাথে সুইফট এনামগুলির সাম্যতা কীভাবে পরীক্ষা করতে হয় তা পড়ার পরে , আমি নিম্নলিখিত এনাম প্রয়োগ করেছি:
enum CardRank {
case Number(Int)
case Jack
case Queen
case King
case Ace
}
func ==(a: CardRank, b: CardRank) -> Bool {
switch (a, b) {
case (.Number(let a), .Number(let b)) where a == b: return true
case (.Jack, .Jack): return true
case (.Queen, .Queen): return true
case (.King, .King): return true
case (.Ace, .Ace): return true
default: return false
}
}
নিম্নলিখিত কোডটি কাজ করে:
let card: CardRank = CardRank.Jack
if card == CardRank.Jack {
print("You played a jack!")
} else if card == CardRank.Number(2) {
print("A two cannot be played at this time.")
}
তবে এটি সংকলন করে না:
let number = CardRank.Number(5)
if number == CardRank.Number {
print("You must play a face card!")
}
... এবং এটি নিম্নলিখিত ত্রুটি বার্তা দেয়:
বাইনারি অপারেটর '==' 'কার্ডর্যাঙ্ক' এবং '(ইনট) -> কার্ডর্যাঙ্ক' প্রকারের অপারেন্ডগুলিতে প্রয়োগ করা যাবে না
আমি এটি ধরে নিচ্ছি কারণ এটি একটি সম্পূর্ণ প্রকারের প্রত্যাশা করছে এবং একটি সম্পূর্ণ ধরণের CardRank.Number
নির্দিষ্ট করে না, যেখানে হয়েছে CardRank.Number(2)
। যাইহোক, এই ক্ষেত্রে, আমি এটি কোনও সংখ্যার সাথে মেলাতে চাই ; শুধু একটি নির্দিষ্ট না।
স্পষ্টতই আমি একটি স্যুইচ স্টেটমেন্ট ব্যবহার করতে পারি, তবে ==
অপারেটর বাস্তবায়নের পুরো বিষয়টিটি ছিল এই ভার্জোজ সমাধানটি এড়ানো:
switch number {
case .Number:
print("You must play a face card!")
default:
break
}
কোনও এনামের সাথে সম্পর্কিত মানটিকে উপেক্ষা করার সাথে সম্পর্কিত মানগুলির সাথে তুলনা করার কোনও উপায় আছে কি?
দ্রষ্টব্য: আমি উপলব্ধি করেছি যে ==
পদ্ধতিতে আমি কেসটি পরিবর্তিত করতে পারি case (.Number, .Number): return true
, তবে, যদিও এটি সঠিকভাবে ফিরে আসবে, আমার তুলনাটি এখনও কোনও সংখ্যার number == CardRank.Number(2)
চেয়ে একটি নির্দিষ্ট সংখ্যার ( ; যেখানে 2 একটি ডামি মান) এর সাথে তুলনা করার মতো দেখায় ( )।number == CardRank.Number
Jack
,Queen
,King
,Ace
মামলার==
: শুধু অপারেটর বাস্তবায়নcase (let x, let y) where x == y: return true