2015-05-20 33 views
17

Merhaba iki int işlenen uygulanan edilemez + İyi, ama neden ikinci değil anlamıyorum. 'İkili operatör' + 'iki tane işleçlere uygulanamaz' hatası alıyorum, ki bu benim için pek bir anlam ifade etmiyor. Birisi bana bazı açıklamalarda yardımcı olabilir mi? Eğer toInt() kullandığınız bir String bir Int almak istiyorsanızİkili operatör bu kodu ile ilgili bir sorum var

let height = "3" 
let number = 4 
let heightNumber = number + height.toInt()! 

:

+0

Ayrıca bu sorunun cevabına da bakınız (http: //stackoverflow.com/questions/40557214/swift-operator-throwing-error-on-two-ints). Esasen, eğer A halihazırda CGFloat'ın bir Çifti veya her ne ise, ve B ve C tamsayılar olarak bildirilmişse, A = B + C, gerçek sorunu ve çözümü engelleyen bu hata mesajıyla başarısız olacaktır: A = Çift (B + C) . Bu soru/cevap, bu hatanın Google aramasının üstündedir; Bazı durumlarda diğer sorunun cevabı daha yararlı olabilir. – ConfusionTowers

cevap

15

1) birinci kod çalışır. Sonra hat

let widthLabel = label + String(width) 

on widthLabel oluşturmak için, + operatörle, dizeleri bitiştirmek ediyoruz.

2) Swift hata iletileri oldukça yanıltıcı olabilir, gerçek sorun String götüren bir init yöntemi yoktur Int olduğunu. Bu durumda, String'da toInt yöntemini kullanabilirsiniz. İşte bir örnek: String başarısız olursa nil dönecektir bir InttoInt beri dönüştürülebilir kontrol etmek

if let h = height.toInt() { 
    let heightNumber = number + h 
} 

Sen kullanmalı ve if let beyanı; Bu durumda unwrapping zorlamak uygulamanızı çökertecek. height ne olacağını aşağıdaki örneğe bakın bir Int dönüştürülebilen değildi:

let height = "not a number" 

if let h = height.toInt() { 
    println(number + h) 
} else { 
    println("Height wasn't a number") 
} 

// Prints: Height wasn't a number 

Swift 2.0 Güncelleme:

Int şimdi örnek olması için, bir String alır Başlatıcı bir sahiptir 2 (yukarıya bakınız):

if let h = Int(height) { 
    let heightNumber = number + h 
} 
+0

Herhangi bir durumda (Int) someString kullanımı mantıklıdır. Ben sadece işlenenlerin int olduğunu fark ettiğim hata açıklamasıyla kafam karışıyor, yani yükseklik bir şekilde Int'e dökülmüş. –

+1

Hayır, ilk olarak, bu Swift'de ("bir" biçimi kullanacaksınız, bkz. Https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html). İkincisi, Swift hata mesajlarının oldukça yanıltıcı olma alışkanlığı vardır, asıl sorun 'ın' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' dır. – ABakerSmith

+0

Harika bir açıklama! Çok teşekkürler! –

0

Tek ihtiyacın budur. String bir Int alır init yöntemi vardır, çünkü

+0

Evet, bunu biliyorum. Ancak hata açıklamasına göre bile operasyonu gerçekleştirebilmek mantıklıdır. Bir şekilde Int'e boyunu döküyor. Ve neden olduğunu merak ediyorum. –

+0

Bu, bir "Int" ile bir "String" i başlatmak için izin verilmez. Int 'sadece bir tam sayı ile girebilirsiniz. Örneğin - 'let a = Int (25)'. –

+0

Tamam. Anladım. Çok teşekkürler! –

İlgili konular