2016-10-12 66 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!] 
    } 
} 
相關問題