を与える私は、次のコードを持っている:私は、これは奇妙な見つけるproduct.price
はタイプPrice?
であり、実行時にスウィフトネストされた非オプションの構造は、オプションの
product = Product(
image: URL(string: "...")!,
title: "...",
price: Price(
value: 5.99,
currency: "CAD"
),
rating: 4.5,
url: URL(string: "...")!
)
:
struct Product {
var image: URL!
var title: String!
var price: Price!
var rating: Float!
var url: URL!
}
struct Price {
var value: Double!
var currency: String! // should be enum
}
を私は後にProduct
を初期化します暗黙のうちにアンラップされているからです。
私はPrice
にinit()
メソッドを与えてみましたが、同じ結果が出ました。また、Product
定義でvar price: Price! = Price(value: 0, currency: "CAD")
を使用して試したところ、同じ結果が得られました。 (メンバーワイズイニシャライザをPrice
に追加します)
ここでは何が起こっていますか?
なぜ構造体のプロパティは暗黙のうちにアンラップされていますか?これは明らかではない。とにかく値をアンラッピングしているので、オプションではないプロパティを使用して、メンバーワイド初期化子を使用するだけです。 – Moritz
* "' product.price'のタイプが '' Price? '"*であることを確認しましたか? - - ImplicitlyUnwrappedOptionalはもはやSwift 3の特殊タイプではありません。 http://stackoverflow.com/questions/39537177/swift-3-incorrect-string-interpolation-with-implicitly-unwrapped-optionsalsまたはhttp://stackoverflow.com/questions/39633481/implicitly-unwrapped-optional-assign- in-xcode-8である。 –
私はオプションではないプロパティを使用しており、問題が解決しました。それはまだ間違いを投げているのではない、それは奇妙だよね?私はデバッガを使ってチェックしました。 ( 'print product.price') –