如何修复无法将类型的值...转换为预期的参数类型inout _

时间:2016-10-12 20:22:27

标签: swift3

我有这个简单的Swift3代码,如果抱怨[Channel]

        var channels = [Channel]()
        ....

        for (_, json) in json["entities"] {
            let channel = Channel(json: json)
            self.channels += [channel]
                 ^ Cannot convert value of type [Channel] to expected argument type inout _
        }

这是频道类:

class Channel {

    var uuid: String
    var title: String?
    var isPublic: Bool

    init(uuid: String) {
        self.uuid = uuid
        self.title = ""
        self.isPublic = false
    }

    init?(json: JSON) {
        self.uuid = json["uuid"].stringValue
        self.title = json["title"].stringValue
        self.isPublic = json["public"].boolValue
    }
}

有些帖子表明该消息可能与闭包相关,但我无法在此处看到关闭。

如何在简单的for循环中修复此错误?

2 个答案:

答案 0 :(得分:4)

错误来自+=声明。 Channel(json:)是一个可用的初始值设定项(注意init?),它返回一个必须打开的Optional。因此,您尝试将+=应用于[Channel][Channel?],且类型不兼容。由于定义+=的方式,错误消息不太清楚。

public func +=<C : Collection>(lhs: inout [C.Iterator.Element], rhs: C)

Swift无法将rhs [Channel?]的类型与lhs的{​​{1}}类型进行协调。

修复方法是打开可用初始化程序[Channel]返回的Channel?

Channel(json:)

答案 1 :(得分:0)

@andig。 [1]您的示例无法编译,因为未定义json和JSON。 [2]现在让我们假设你在Class Channel中正确地创建了一个可用的初始化器初始化器(json:JSON){},然后vacawama的解释是正确的。将代码更改为以下代码应该有效。

for (_, json) in json["entities"] {
    if let channel = Channel(json: json) {
        self.channels += [channel!]
    }
}