Hata raporu: çözüldüğünü
(2017 Oca 3 usta taahhüt fix) ve dolayısıyla artık yaklaşan Swift 3.1 bir sorun olması gerekir.
Bu bir hata gibi görünüyor (Swift 2.2 bulunmayan, sadece 3.0) durumunda ilişkili:
- bir in en az 3 dönem için zorunlu unwrapping operatörü (
!
) kullanma ifade (en az 2 temel operatör kullanılarak test edilmiştir, örneğin +
veya -
).
- Yukarıdaki nedenlerden ötürü, Swift'in ifadesi, ifade ifadesinin çıkarımını (özellikle,
x!
ifadesinin kendisinde, ifadede) çıkarır. Aşağıdaki tüm örnekler için
, izin:
let a: String? = "a"
let b: String? = "b"
let c: String? = "c"
Hata mevcut: mevcut olmayan
// example 1
a! + b! + c!
/* error: ambiguous reference to member '+' */
// example 2
var d: String = a! + b! + c!
/* error: ambiguous reference to member '+' */
// example 3
var d: String? = a! + b! + c!
/* error: cannot convert value of type 'String'
to specified type 'String?' */
// example 4
var d: String?
d = a! + b! + c!
/* error: cannot assign value of type 'String'
to specified type 'String?' */
// example 5 (not just for type String and '+' operator)
let a: Int? = 1
let b: Int? = 2
let c: Int? = 3
var d: Int? = a! + b! + c!
/* error: cannot convert value of type 'Int'
to specified type 'Int?' */
var e: Int? = a! - b! - c! // same error
Hata:
/* example 1 */
var d: String? = a! + b!
/* example 2 */
let aa = a!
let bb = b!
let cc = c!
var d: String? = aa + bb + cc
var e: String = aa + bb + cc
/* example 3 */
var d: String? = String(a!) + String(b!) + String(c!)
Ancak bu, Swift 3.0- dev olduğu gibi, bunun gerçekten bir "hata" olup olmadığı ve politikanın ne olduğunu bilmiyorum. kodun henüz üretilmemiş bir sürümünde "hatalar" bildirilmesi, ancak muhtemelen bunun için radarı dosyalamanız gerekir.
- kullanımını örn: Bu sorunu aşmak için nasıl gibi soruya cevap gelince
Hata mevcut olmadığı gibi ara değişkenler: yukarıdaki Örnek 2,
- veya açıkça hata mevcut değil 3-vadeli ifade tüm terimler dizeleri Swift, söyle: Örnek 3 Yukarıdaki,
veya daha iyisi, isteğe bağlı güvenli unwrapping kullanın, örneğin bağlayıcı isteğe bağlı kullanarak:
var d: String? = nil
if let a = a, b = b, c = c {
d = a + b + c
} /* if any of a, b or c are 'nil', d will remain as 'nil';
otherwise, the concenation of their unwrapped values */
Teşekkür cevap için, ben bir hata [burada] (https://bugs.swift.org/ açtı)/SR-1122 göz – DMSilva