私は迅速に初心者ですので、これは間違いなく初心者レベルの質問です。私は潜在的なエラーに気づいたSwift 3.0のドキュメントを熟考していました。私は、例が間違っている(あいまいである)のか、実際にはいくつかのガイドラインに欠けているのだろうかと思います。Swift 3.0 Optional Chaining
http://swiftdoc.org/v3.0/type/Optional/を参照してください。
安全ポストフィックスオプションチェーン演算子(
?
)を使用して、ラップされたインスタンスのプロパティとメソッドにアクセスする連鎖OPTIONAL。次の例では、オプションの連鎖を使用して
String?
インスタンスのhasSuffix(_:)
メソッドにアクセスします。if let isPNG = imagePaths["star"]?.hasSuffix(".png") { print("The star image is in PNG format") } // Prints "The star image is in PNG format"
AFAIU、imagePaths["star"]?.hasSuffix(".png")
だけ安全にimagePaths
のラップを解除し、Optional.some(wrapped)
でimagePaths["star"]
結果場合のみhasSuffix()
を実行することになっています。これは、isPNG
がtrue
またはfalse
のいずれかになることを意味します。したがって、上記のサンプルの含意は、これが安全にアンラップすると値が常にtrueであることを暗黙的に主張するところでは間違っています。ここで
は、私が何を言っているかを説明するためにいくつかの例です:
if let isPNG = imagePaths["star"]?.hasSuffix(".png") {
print("The star has png format")
} else {
print("The star does not have png format")
}
if let isPNG = imagePaths["portrait"]?.hasSuffix(".png") {
print("The portrait has png format")
} else {
print("The portrait does not have png format")
}
// "The portrait has png format\n"
if let isPNG = imagePaths["alpha"]?.hasSuffix(".png") {
print("The alpha has png format")
} else {
print("The alpha does not have png format")
}
// "The alpha does not have png format\n"
私の現在の分析が間違っている場合やSwiftDoc.orgは、この特定の例を変更する必要がある場合、私は単純に疑問に思って。
のために私は同意するものとします。マニュアルが正しくありません。もし、ifPNG = imagePaths ["star"] ?. hasSuffix( ".png")ここでisPNG {...} 'または' imagePaths ["star"] ?. hasSuffix( " .png ")== true {...}'。しかし、その例は間違っています。 – Rob
...'img = imagePaths [" star "] img.hasSuffix(" .png "){...}'のようにします。 – dfri
この例は、実際にはAppleのドキュメント、https://developer.apple.com/reference/swift/optional(https://github.com/apple/swift/blob/master/stdlib/public/core/Optionalから生成されています)にあります。迅速に)、誰かがバグレポートを提出する必要があります。 –