সুইফট 3.0
সুইফট ২.০-এর প্রায় সমান। অপশনসেটটাইপটির নাম পরিবর্তন করে অপশনসেট করা হয় এবং এনামগুলি কনভেনশন অনুসারে লোয়ার কেস লিখিত হয়।
struct MyOptions : OptionSet {
let rawValue: Int
static let firstOption = MyOptions(rawValue: 1 << 0)
static let secondOption = MyOptions(rawValue: 1 << 1)
static let thirdOption = MyOptions(rawValue: 1 << 2)
}
none
বিকল্প সরবরাহ করার পরিবর্তে , সুইফট 3 সুপারিশটি কেবল খালি অ্যারে আক্ষরিক ব্যবহার করা:
let noOptions: MyOptions = []
অন্যান্য ব্যবহার:
let singleOption = MyOptions.firstOption
let multipleOptions: MyOptions = [.firstOption, .secondOption]
if multipleOptions.contains(.secondOption) {
print("multipleOptions has SecondOption")
}
let allOptions = MyOptions(rawValue: 7)
if allOptions.contains(.thirdOption) {
print("allOptions has ThirdOption")
}
সুইফট ২.০
সুইফট ২.০-তে, প্রোটোকল এক্সটেনশানগুলি এগুলির জন্য বেশিরভাগ বয়লারপ্লেটের যত্ন নেয়, যা এখন কাঠামোর মতো আমদানি করা হয় OptionSetType
। ( RawOptionSetType
সুইফট 2 বিটা 2 হিসাবে অদৃশ্য হয়ে গেছে) ঘোষণাটি এত সহজ far
struct MyOptions : OptionSetType {
let rawValue: Int
static let None = MyOptions(rawValue: 0)
static let FirstOption = MyOptions(rawValue: 1 << 0)
static let SecondOption = MyOptions(rawValue: 1 << 1)
static let ThirdOption = MyOptions(rawValue: 1 << 2)
}
এখন আমরা এর সাথে সেট-ভিত্তিক শব্দার্থ ব্যবহার করতে পারি MyOptions
:
let singleOption = MyOptions.FirstOption
let multipleOptions: MyOptions = [.FirstOption, .SecondOption]
if multipleOptions.contains(.SecondOption) {
print("multipleOptions has SecondOption")
}
let allOptions = MyOptions(rawValue: 7)
if allOptions.contains(.ThirdOption) {
print("allOptions has ThirdOption")
}
সুইফট ১.২
উদ্দেশ্য সি বিকল্প (SWIFT দ্বারা আমদানি করা হয় এ খুঁজছি UIViewAutoresizing
উদাহরণস্বরূপ,), আমরা দেখতে পারেন অপশন হিসেবে ঘোষিত হয় struct
যে প্রোটোকল কে কনর্ফাম করে RawOptionSetType
, যেটা ঘুরে কনর্ফাম করা _RawOptionSetType
, Equatable
, RawRepresentable
, BitwiseOperationsType
, এবং NilLiteralConvertible
। আমরা আমাদের নিজস্ব তৈরি করতে পারি:
struct MyOptions : RawOptionSetType {
typealias RawValue = UInt
private var value: UInt = 0
init(_ value: UInt) { self.value = value }
init(rawValue value: UInt) { self.value = value }
init(nilLiteral: ()) { self.value = 0 }
static var allZeros: MyOptions { return self(0) }
static func fromMask(raw: UInt) -> MyOptions { return self(raw) }
var rawValue: UInt { return self.value }
static var None: MyOptions { return self(0) }
static var FirstOption: MyOptions { return self(1 << 0) }
static var SecondOption: MyOptions { return self(1 << 1) }
static var ThirdOption: MyOptions { return self(1 << 2) }
}
এখন আমরা এই নতুন বিকল্প সেটটিকে চিকিত্সা করতে পারি MyOptions
, যেমন অ্যাপলের ডকুমেন্টেশনে বর্ণিত: আপনি পছন্দ enum
মতো সিনট্যাক্স ব্যবহার করতে পারেন :
let opt1 = MyOptions.FirstOption
let opt2: MyOptions = .SecondOption
let opt3 = MyOptions(4)
এবং এটি এমন আচরণ করে যেমন আমরা বিকল্পগুলির আচরণের প্রত্যাশা করতাম:
let singleOption = MyOptions.FirstOption
let multipleOptions: MyOptions = singleOption | .SecondOption
if multipleOptions & .SecondOption != nil { // see note
println("multipleOptions has SecondOption")
}
let allOptions = MyOptions.fromMask(7) // aka .fromMask(0b111)
if allOptions & .ThirdOption != nil {
println("allOptions has ThirdOption")
}
আমি সমস্ত সন্ধান / প্রতিস্থাপন ছাড়াই একটি সুইফ্ট বিকল্প সেট তৈরি করতে একটি জেনারেটর তৈরি করেছি ।
সর্বশেষ: সুইফট 1.1 বিটা 3 এর জন্য পরিবর্তনসমূহ।
RawOptionsSetType
: nshipster.com/rawoptionsettype