সম্পর্কিত মানগুলির সাথে সুইফট এনামগুলির সাম্যতা কীভাবে পরীক্ষা করতে হয় তা পড়ার পরে , আমি নিম্নলিখিত এনাম প্রয়োগ করেছি:
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