尝试按字母顺序按“名称”对数组中的JSON对象数组进行排序。给出错误消息“类型为'IndividualContact'的值没有下标”不确定这是什么意思。任何帮助表示赞赏。
class Contacts{
var contact = [IndividualContact]()
init?(data2: Data) {
do {
if let json2 = try JSONSerialization.jsonObject(with: data2) as? [String: Any], let body = json2["data2"] as? [String: Any] {
if let contacts = body["contacts"] as? [[String: Any]] {
self.contact = ( contacts.map { IndividualContact(json2: $0) } )
}
}
contact.sorted(by: { ($0["name"] as! String) < ($1["name"] as! String) })
} catch {
print("Error deserializing JSON: \(error)")
return nil
}
}
}
答案 0 :(得分:0)
编译器告诉您,对象(IndividualContact
)没有提供下标标记(即[...]
)的实现。尽管您可以在struct / class中提供该实现,但是在这种情况下这样做可能会过分地犯错。您可能只想在$0.name
闭包中调用sorted(by:)
:
contact.sorted(by: { $0.name < $1.name })
如果您确实想使用$0["name"]
语法,则可以提供这样的实现。它可能看起来像这样:
subscript(key: String) -> String {
get {
switch key {
case "name":
return self.name
default:
return ""
}
}
set {
...
}
}
有关下标的更多信息,请参见:https://docs.swift.org/swift-book/LanguageGuide/Subscripts.html