У меня есть следующий код:Swift вложенная не опциональным структура дает опционально
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
с:
product = Product(
image: URL(string: "...")!,
title: "...",
price: Price(
value: 5.99,
currency: "CAD"
),
rating: 4.5,
url: URL(string: "...")!
)
Во время выполнения product.price
имеет тип Price?
Я нахожу это странным поскольку он неявно разворачивается.
Я попытался дать Price
метод init()
, с теми же результатами. Я также пробовал использовать var price: Price! = Price(value: 0, currency: "CAD")
в определении Product
с теми же результатами. (Я добавляю элементный инициализатор в Price
.)
Что здесь происходит?
Почему свойства struct неявно разворачиваются в первую очередь? Это не ясно. Так как вы все равно разворачиваете значения, вы должны просто использовать необязательные свойства и использовать инициализатор по порядку. – Moritz
Как вы проверили, что * "' product.price' имеет тип 'Price?' "* - Обратите внимание, что ImplicitlyUnwrappedOptional больше не является отдельным типом в Swift 3. См. Например. http://stackoverflow.com/questions/39537177/swift-3-incorrect-string-interpolation-with-implicitly-unwrapped-optionals или http://stackoverflow.com/questions/39633481/implicitly-unwrapped-optional-assign- в-Xcode-8. –
Я использую не-необязательные свойства, и он исправляет проблемы, которые я испытывал. По-прежнему странно, что он не бросает никаких ошибок, правда? Я проверил использование отладчика. ('print product.price') –