我有这个简单的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循环中修复此错误?
答案 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!]
}
}