我是Swift的新手,我在检测plist中的信息时遇到了问题(参见图片),特别是在迭代内容和比较plist与用户输入方面。我有一个
我的代码中出现“类型'字符串'不符合协议'序列类型'
错误。
func matchTraveller(location: Destination, preference: TravellingPreference) -> String{
var message = ""
if let path = NSBundle.mainBundle().pathForResource("Locals", ofType: "plist"){
if let map = NSDictionary(contentsOfFile: path){
if let locals = map["Local"] as? String {
for local in locals{ // <-- ERROR HERE
let city = local["City"]
if local["City"] == location {
message = "We have matched you with \(local) in \(city)."
} else{
message = "Apologies, there aren't any locals registered in \(city) on LocalRetreat. Try again soon!"
break
}
if local["Preference"] == preference{
let prefer = local["Preference"]
message += "\(local) is also a \(prefer)"
}
return message
}
}
}
}
}
答案 0 :(得分:2)
你告诉Swift locals
是一个字符串。我认为您的意思是将其定义为[String]
。
if let locals = map["Local"] as? String {
更改为:
if let locals = map["Local"] as? [String] {
您的plist数据与代码不符。 plist中的内容是String数组的字典。
[String: [String]]
代码试图以字符串数组的字典来访问它:string。
[String: [String: String]]
您可以修改plist数据或更改代码。你想要哪一个?
答案 1 :(得分:-1)
您需要定义您期望的类型。
您好像希望locals
成为一系列词典([String: String]
或[String: AnyObject]
,因此请尝试将map["Local"]
投射到该词典(即{ {1}})。
最终,plist是一种序列化结构化数据的方法。在开始工作之前,您需要了解您正在处理的结构。