gpt4 book ai didi

ios - 类型不符合协议(protocol)序列类型 - Swift

转载 作者:搜寻专家 更新时间:2023-10-31 22:30:19 24 4
gpt4 key购买 nike

在我的 swift 应用程序中,我正在从网络服务中获取数据。数据以数组形式出现:

{"hashtags": ["first", "second"]}

我想将每个主题标签放在我的 UITableView 的单独行中。我有这样做的逻辑,但首先 - 我在解析数据时遇到了错误。

我写了一个自定义函数:

class SingleHashtag: NSObject {

var hashtagText: [String]

init(hashtagText: [String]) {
self.hashtagText = hashtagText
super.init()
}

class func fromJSON(json: JSON) -> SingleHashtag? {
let hashtagText:[String] = json["hashtags"].arrayValue.map { $0.stringValue}
return SingleHashtag(hashtagText: hashtagText)
}
}

然后在我的主课上我有:

Alamofire.request(.GET, "\(serverURL)/hashtags"/*, headers: headers*/)
.validate()
.responseJSON { response in
print(response.description)
switch response.result {
case .Success:
dispatch_async(dispatch_get_main_queue(),{
self.items.removeAllObjects()
if let jsonData = response.result.value as? [[String: AnyObject]] {
for hashtag in jsonData {
if let userHashtags = SingleHashtag.fromJSON(JSON(hashtag)){
for hash in userHashtags {
self.items.addObject(hash)
self.hashtagTable.reloadData()
}
}
}
}
self.hashtagTable.reloadData()
})
case .Failure(let error):
print(error)
}
}

但是这一行:

for hash in userHashtags {

在编译时抛出一个错误:

type SingleHashtag does not conform to protocol 'SequenceType'

我尝试添加 as AnyObject 但这没有帮助。你能告诉我这里可能出了什么问题吗?

最佳答案

根据我们在评论中的对话,这里似乎有很多事情在起作用。

items 定义为像 NSMutableArray 这样的 objective-c 对象是在对抗 Swift 并剥夺它的类型强度。如果 items 只是一个标签字符串列表,那么它应该这样输入。尝试将您的项目声明更改为:

var items = [String]()

根据您分享的内容,它看起来也不需要单独的 SingleHashtag 类。如果它只有一个 String 变量,直接将字符串传递给项目会更简单。这里有一个例子:

Alamofire.request(.GET, "\(serverURL)/hashtags"/*, headers: headers*/)
.validate()
.responseJSON { response in
print(response.description)
switch response.result {
case .Success:
dispatch_async(dispatch_get_main_queue(),{
self.items.removeAll()

//cast the jsonData appropriately, then grab the hashtags
if let jsonData = response.result.value as? [String: [String]],
let hashtags = jsonData["hashtags"] {

//hashtags is now type [String], so you can loop
//through without the error and add the strings to 'items'
for hashtagText in hashtags {
self.items.append(hashtagText)
self.hashtagTable.reloadData
}
}
})
case .Failure(let error):
print(error)
}
}

注意:这是用 Swift 3 编写的,因此如果您使用的是旧版本的 Swift,将会有一些语法差异。

关于ios - 类型不符合协议(protocol)序列类型 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39750335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com