Ai đó có thể giải thích những gì đang xảy ra trong mã dưới đây? Nó tạo ra một cấu trúc Either
có hai kiểu tùy chọn và (cố gắng) trả lại bất kỳ kiểu nào không phải là nil, hoặc đầu tiên nếu cả hai không phải là số không. Tuy nhiên, nó cư xử lạ lùng khi đi qua con số không đen như trái ngược với một biến con số không. Tôi không thể hiểu tại sao b4
trong ví dụ này cư xử như nó ...Thực hiện cấu trúc "Hoặc" trong Swift
struct Either <T1, T2> {
let first: T1?
let second: T2?
init(first: T1?, second: T2?) {
self.first = first
self.second = second
}
func either() -> Bool {
return (self.first != nil) || (self.second != nil)
}
func which() -> Any? {
if self.first != nil {
return self.first
} else if self.second != nil {
return self.second
}
return nil
}
}
var s1: String? = nil
var s2: Int? = nil
let b1 = Either(first: s1, second: s2)
b1.either() // false
b1.which() // {nil}
s1 = "Hello"
let b2 = Either(first: s1, second: s2)
b2.either() // true
b2.which() // {Some Hello}
s1 = nil
s2 = 7
let b3 = Either(first: s1, second: s2)
b3.either() // true
b3.which() // {Some 7}
// all as expected, however
let b4 = Either(first: nil, second: nil)
b4.either() // true !!! <<<<<<<<<<<<<<<<<<
b4.which() // {nil}
tôi nghĩ rằng nó đã làm với "Tùy chọn Tùy chọn ", nhưng tôi không chắc nó hoạt động như mong đợi.
Cảm ơn bạn đã liên kết, @Sulthan. Việc thêm các mệnh đề 'if let' mà họ đề nghị không tạo ra sự khác biệt nào, nhưng lời nhận xét đóng của họ" Có lẽ không pha trộn các tùy chọn và Bất kỳ "là ... tốt ... ít hơn lý tưởng! Tôi thấy điều đáng lo ngại là tôi không thể dự đoán/hợp lý hoá _why_ điều này xảy ra. – Grimxn
'let b4 = Hoặc là (thứ nhất: không, giây: không)' hoạt động, như bạn đề nghị. Horrid. –
Grimxn
@Grimxn Tôi vừa mới đến Xcode và phải chỉnh sửa câu trả lời vì vấn đề phức tạp hơn tôi nghĩ ban đầu. – Sulthan