类型不符合协议序列类型 - Swift

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但这没有帮助。你能告诉我这里可能出了什么问题吗?

BJH*_*ios 5

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

像这样定义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,将会存在一些语法差异。