2016-11-11 23 views
11

Burada çok garip bir hata var ve her yeri aradım ve tüm önerileri denedim. Hiçbiri işe yaramıyor.İki operatörde "*" atıcı hatası atılıyor

scrollView.contentSize.height = 325 * globals.defaults.integer(forKey: "numCards") 

Binary operator '*' cannot be applied to two 'Int' operands

WTF Swift! Neden olmasın? Her zaman Ints'u çarpıyorum. Bu A0 iki Ints. globals.defaults, yalnızca UserDefaults.standard'un bir örneğidir. Her seferinde aynı hatayı takip ettim. i Bunlardan ikisi Ints bir gerçeği bildiği gibi

325 * Int(globals.defaults.integer(forKey: "numCards") //NOPE 

Int(325) * Int(globals.defaults.integer(forKey: "numCards")) //NOPE 

if let h = globals.defaults.integer(forKey: "numCards"){ 
    325 * h //NOPE, and 'Initializer for conditional binding must have optional type, not Int' 
} 

let h = globals.defaults.integer(forKey: "numCards") as! Int 
325 * h //NOPE, and 'Forced cast of Int of same type as no affect' 

325 * 2 //YES! But no shit... 

bu "girişimleri" nin tamamı

zaman kaybı gibi görünüyordu ... ve ben doğruydu. Tavsiye lütfen. Teşekkürler!

cevap

30

Hata yanıltıcı. Sorun,değerini CGFloat değişkenine atamaktır.

Bu çalışacaktır:

scrollView.contentSize.height = CGFloat(325 * globals.defaults.integer(forKey: "numCards")) 

yanıltıcı hatanın neden (teşekkür Daniel Hall aşağıdaki yorum) nedeniyle gerekli dönüş değerine CGFloat döndüren * fonksiyonunu seçerek derleyici kaynaklanmaktadır . Bu aynı işlev iki CGFloat parametresini bekler. sağlanan iki argüman Int yerine CGFloat olduğundan, derleyici yanıltıcı hata sağlamaktadır:

Binary operator '*' cannot be applied to two 'Int' operands. Expecting two 'CGFloat' operands.

+0

Eh doğru şunlardır: Hata fazla gibi olsaydı

Binary operator '*' cannot be applied to two 'Int' operands

iyi olurdu. Bu işe yarıyor. Ama neden dünyada aşağıdaki iş yapıyor? scrollView.contentSize.height = 325 * 2' _misleading hatası bir Swift hatası mı? – TheValyreanGroup

+0

Derleyici, sayı değişmezlerine belirli bir türdeki değişkenlerden farklı davranır. '325 * 2'' CGFloat' olarak anlaşılabilir. – rmaddy

+0

Tamam. _misleading error_ hakkındaki düşünceleriniz nedir? – TheValyreanGroup

İlgili konular