转换为斯威夫特3错误,可选的类型不解开
此代码与斯威夫特2书面的价值的工作,但不能与斯威夫特3.转换为斯威夫特3错误,可选的类型不解开
ShoppingManager.getShoppingItemsForPage(currentPage, pageSize: 40) { (shopItems: [ShopItemModel]?, error: Error?) ->() in
if error == nil {
...
self.shopItems.append(Array(shopItems[10..<40]))
我得到一个错误
value of optional type [ShopItemModel] not unwrapped
。
我试过使用?
但它不起作用。
这里是我的ShopItemModel
class ShopItemModel: NSObject {
//RestKitMapping
var itemID: String?
var shopName: String?
展开使用guard let
声明否则你可以强制拆开包装使用!
但如果shopItems是零
guard let shopItemArray = shopItems else {
return // shopItems is nil if it goes here
}
self.shopItems.append(Array(shopItemArray[10..<40]))
这不适合我。我犯了同样的错误。 – markhorrocks
'self.shopItems'的类型是什么? – Jeremy
它是[ShopItemModel]类型,它是一个包含可选属性的NSObject。 – markhorrocks
这编译就会死机你shopItems:
ShoppingManager.getShoppingItemsForPage(currentPage, pageSize: 40) { (shopItems: [ShopItemModel]?, error: Error?) ->() in
if error == nil {
let lastItem = self.shopItems.count
if self.currentPage == 1 {
self.shopItems.append(contentsOf: Array(shopItems![10..<40]))
} else {
self.shopItems.append(contentsOf: Array(shopItems!))
}
解开力并不是一个很好的做法,因为它可能导致崩溃,您应该使用'if let'或'guard let'语句来确保您的可选对象存在 – Jeremy
你在哪里尝试使用'?' ?至于我可以告诉这应该工作:self.shopItems?.append(Array(shopItems?[10 .. giorashc
'shopItems?'产生一个类似的解包错误; '不能在非可选的ShopItemModel' \上使用可选的链接。没有?我得到; '可选类型的值ArraySlice ...''' – markhorrocks
编译器想要解包'shopItems![10 .. vadian