2016-10-12 53 views
3

我有这个简单的Swift3代码,如果抱怨[Channel]其中:如何修复无法转换类型的值...预期参数类型INOUT _

 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

嘛,有什么错误? ... – Alexander

+3

用完整准确的错误信息更新您的问题并指出导致错误的行。 – rmaddy

回答

4

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

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

Swift则无法调和这是[Channel?]与作为[Channel]lhs类型的rhs类型。

解决方法是解开由failable初始化Channel(json:)返回Channel?

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

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

@andig。 [1]你的例子不能编译,因为json和JSON都没有定义。 [2]现在让我们假设你在Class Channel中正确地创建了failable初始化器init(json:JSON){},然后vacawama的解释是正确的。改变你的代码到下面应该可以。

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