İki şey (biz bunu sevmesem) burada gerçekleşir: Önce, bir operatör yatan tip karşılaştırılabilir ise iki isteğe bağlı öğeleri karşılaştırır
public func <<T : Comparable>(lhs: T?, rhs: T?) -> Bool
yoktur. Davranış (bildiğim kadarıyla) belgelenmemiş, ancak Optional<T>.None
Optional<T>.None
'un Optional<T>.Some(value)
numaralı Optional<T>.Some(value)
numaralı değerlerden daha az olduğu düşünülmektedir.
İkincisi,enum Optional
bir kurucu
if x < 10 { ... }
lhs Şimdi
/// Construct a non-`nil` instance that stores `some`.
public init(_ some: Wrapped)
tip Optional<Int>
sahiptir vardır. <
operatörünün tek adayı yukarıda belirtilen iki opsiyonu karşılaştırır. nedenle rhs'si da, isteğe bağlı olarak çıkarılır, bu nedenle bu
if x < Optional<Int>.Some(10) { ... }
Güncelleme eşdeğerdir:
Bu özellik, Swift 3'te kaldırıldı
(SE-0121 – Remove Optional Comparison Operators) ve bu kodu artık Xcode 8 (şu anda beta 6) ile derleme yapmıyor.
Ayrıca '' isteğe bağlı'ların 'let' ile bildirilmesine izin verilmesinin ilginç olacağı - yanlış düşünülmüş gibi görünüyor - –
Bana bir hata gibi görünüyor, nil ile doğrudan karşılaştırırsanız bile çalışır. <-100' –
Böylesine temel bir dil seviyesinde bir hataya inanmak zor. – Darko