use*_*930 3 uitableview ios swift alamofire swifty-json
swift我从我的应用程序中从网络服务获取数据。数据以数组形式出现:
{"hashtags": ["first", "second"]}
Run Code Online (Sandbox Code Playgroud)
我想将每个主题标签放在我的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)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的主课上我有:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
但这行:
for hash in userHashtags {
Run Code Online (Sandbox Code Playgroud)
编译期间抛出错误:
type SingleHashtag does not conform to protocol 'SequenceType'
Run Code Online (Sandbox Code Playgroud)
我尝试添加,as AnyObject但这没有帮助。你能告诉我这里可能出了什么问题吗?
根据我们在评论中的对话,看起来这里有很多事情在起作用。
像这样定义items为 Objective-C 对象NSMutableArray是在对抗 Swift,并剥夺了它的打字能力。如果items只是一个主题标签字符串列表,那么应该这样输入。尝试将您的物品声明更改为:
var items = [String]()
Run Code Online (Sandbox Code Playgroud)
根据您分享的内容,它看起来也不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)
}
}
Run Code Online (Sandbox Code Playgroud)
注意:这是用 Swift 3 编写的,因此如果您使用旧版本的 Swift,将会存在一些语法差异。
| 归档时间: |
|
| 查看次数: |
6449 次 |
| 最近记录: |