问题描述
我正在使用 JSONDecoder 将从 API 获得的 JSON 解码为一个对象数组,每个对象包含一个感兴趣的键值对。对于那个键,我想获得一个值数组(即字符串)。 JSON 可以很好地解码为数组,但是,我无法使用 Array[key] 为我感兴趣的键提取值数组。我做错了什么?
开始的 JSON 看起来像:
[{"word":"hi"},{"word":"howdy"},{"word":"hullo"}]
我的代码:
struct Synonym: Codable {
let word: String
}
typealias Synonyms = [Synonym]
//Code to create session etc and get data
let mysynonyms = try? JSONDecoder().decode(Synonyms.self,from: data)
//everything works fine up to here
var words = mysynonyms?[word]! //THROWS ERROR Use of unresolved identifier 'word'
对于最后一行为何不起作用的任何建议,我们将不胜感激。
解决方法
var words = (mysynonyms ?? []).map { $0.word }
在类型(结构/类)上使用 []
下标语法在 Swift 中不起作用 - 相反,您需要使用点语法来获取属性。而且,由于您需要所有单词,因此可以使用 map
来转换数组。
我还使用 ??
表示“如果 mysynonyms
为 nil,则映射一个空数组”,因此 words
将是 []
,如果 mysynonyms
{1}} 是 nil
。