böyle, yukarıdaki kodundan sonra numberFormatter.stringFromNumber(12345678)
çağırdığınızda demek?
let i = 1234567890
let n = i as NSNumber // OK
numberFormatter.stringFromNumber(i) // Also OK
// Compiler error: 'Int64' is not convertible to 'NSNumber'
let n64 = i64 as NSNumber
// so the implicit conversion will also fail:
numberFormatter.stringFromNumber(i64)
Bu Int
ler genellikle kendileri Int64
s ile aynı boyuttadır Swift beri, biraz karıştırıcı geçerli: Swift bir NSNumber
bir Int64
döküm olacak gibi
let i64: Int64 = 1234567890
numberFormatter.stringFromNumber(i64)
görünmüyor. buna
numberFormatter
oluşturmak için tüm ilgili kodun kapsüller çok hoş, ama bu kod yeniden her zaman geçerli olacaktır:
let n64 = NSNumber(longLong: i64)
BTW o var
trick dikkat:
Sen elle bir NSNumber
oluşturarak etrafında çalışabilirsiniz bunu kullan. Alternatif olarak bunu yapabilirsiniz:
let numberFormatter: NSNumberFormatter = {
let formattedNumber = NSNumberFormatter()
formattedNumber.numberStyle = .DecimalStyle
formattedNumber.maximumFractionDigits = 0
return formattedNumber
}()
bir yapı/sınıfta bir özellik varsa, bu bağlantıyı siz de değişken senin var
gibi kullanılması halinde sadece çalışan olmanın yararı olan bir lazy var
yapabiliriz ama sadece bir kez.
struct Thing {
lazy var numberFormatter: NSNumberFormatter = {
println("blah")
let formattedNumber = NSNumberFormatter()
formattedNumber.numberStyle = .DecimalStyle
formattedNumber.maximumFractionDigits = 0
return formattedNumber
}()
}
evet Longlong yöntemi benim için hile yaptı. – Kashif