Hata iletisinin yanıltıcı olduğunu düşünüyorum. Asıl konu, ikinci çağrıda literal 1
'un nasıl yorumlanacağıydı.
let a = 1 // a is an Int
Fakat derleyici bağlama bağlı vb Double
, UInt32
, CChar
olarak okuyabilirsiniz:
func takeADouble(value: Double) { ... }
func takeAUInt(value: UInt) { ... }
takeADouble(value: 1) // now it's a Double
takeAUInt(value: 1) // now it's a UInt
type(of:)
bir şekilde defined olan bir değişken tanımlamak bir Int
Swift varsayılan Genel işlev:
func type<Type, Metatype>(of: Type) -> Metatype
Derleyici hiçbir ipucu yok Type
genel parametresini nasıl yorumlayacağınız hakkında: Int
, UInt
, UInt16
vb.? Sen coompiler ne tür söylemek tarafından biraz yardım verebilir
Overloads for '==' exist with these partially matching parameter lists
(Any.Type?, Any.Type?), (UInt8, UInt8), (Int8, Int8),
(UInt16, UInt16), (Int16, Int16), (UInt32, UInt32), ...
:
type(of: 1 as Int) == Int.self
İlginçtir, 'tür1 = tipi (bir let: İşte IBM Swift Sandbox aldığım hata var 1 type1 == Int.self' çalışır – Sweeper
Bir çözüm bu gibi bir Tamsayıyı başlatmak için olabilir 'tür (of: Int (1)) == Int.self // true döndürür Neden olduğunu bilmiyorum gerekli olsa da, – Frederik
Garip bir şekilde, b 'yazdýrma b = yazýcý yazýcý (of: 1)' baskýlarý Int. – paper1111