簡體   English   中英

Swift 3三元運算符錯誤類型'Any'沒有下標成員

[英]Swift 3 ternary operator Error Type 'Any' has no subscript members

我有一個功能

func test (food_item_raw:NSArray){

    for j in 0...food_item_raw.count-1{

        let food_name = food_item_raw[j]["food_name"] as? String == nil ? "nil" : food_item_raw[j]["food_name"] as! String

        let food_url = food_item_raw[j]["food_url"] as? String == nil ? "nil" : food_item_raw[j]["food_url"] as! String

        let food_price = food_item_raw[j]["food_price"] as? String == nil ? "nil" : food_item_raw[j]["food_price"] as! String

        let food_desc = food_item_raw[j]["food_desc"] as? String == nil ? "nil" : food_item_raw[j]["food_desc"] as! String

        //let food_item = FoodItems(food_url: food_url, food_name: food_name, food_catagory: food_type,food_price: food_price, food_desc: food_desc)

        //weakFoodArray.append(food_item)

    }
}

在swift 2和swift 2.3中工作正常,但是在swift 3中我遇到錯誤Type 'Any' has no subscript members

這是屏幕截圖

代碼屏幕截圖

為什么會發生?

Swift 3中的NSArray被橋接到[Any] 因此food_item_raw[j]類型為Any

這是您的Error Type 'Any' has no subscript members Any協議都是空協議,它什么也沒有,甚至沒有subscript

為了防止這種情況,只需添加一些類型,將NSArray更改為[T] ,其中T是Type,您的情況看起來像T == [String: String] 這也將使您免於在每一行中進行類型轉換。

您可以將代碼更改為此,例如:

func test (food_item_raw:[[String: String]]) {

    for food_item in food_item_raw {

        let food_name = food_item["food_name"] ?? "nil"

        let food_url = food_item["food_url"] ?? "nil"

        let food_price = food_item["food_price"] ?? "nil"

        let food_desc = food_item["food_desc"] ?? "nil"

        //let food_item = FoodItems(food_url: food_url, food_name: food_name, food_catagory: food_type,food_price: food_price, food_desc: food_desc)

        //weakFoodArray.append(food_item)

    }
}

而且,順便說一句,我用枚舉代替了索引,因為每行中的food_item_raw[j]是多余的,看起來很傻。

同樣,巨大的復雜三元運算符也可以用Nil-Coalescing運算符?? )代替,它的作用相同,但更短。

問題出在您使用Objective-C類型的NSArray(在第一行)。 您需要將此事物強制轉換為它真正包含的任何元素類型的Swift數組。 看起來它的類型是[[String:Any]] 也許[[String:String]]

您所做的總是一個壞主意,現在Swift 3告訴您了。 這是斯威夫特。 使用Swift類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM