2014-09-05 65 views
42

當我試圖實現我的方案是這樣的:我可以在協議中使用init func嗎?

protocol Serialization { 
    func init(key keyValue: String, jsonValue: String) 
} 

我收到一條錯誤消息:在函數聲明預計標識符。

爲什麼我得到這個錯誤?

+0

爲什麼你想要一個協議呢?它爲什麼關心類型是如何創建的? – Mark 2014-09-05 22:52:09

+4

一個對象可以有多個init函數。爲什麼沒有一個協議規定可以被調用? – 2014-09-06 00:29:38

+6

這是因爲'init'前面的'func'關鍵字。刪除它並再試一次。 – 2014-09-06 00:44:54

回答

76

是的,你可以。但是你從來沒有把func在前面的init:這裏

protocol Serialization { 
    init(key keyValue: String, jsonValue: String) 
} 
+1

你能解釋一下在init之前不把func的原因嗎?謝謝。 – LiweiZ 2015-01-26 21:34:45

+4

@李維z:因爲初始值和方法是分開的 – newacct 2015-01-26 21:36:24

+0

謝謝。我想我需要再次通過開發人員文檔:) – LiweiZ 2015-01-27 01:36:30

16

要點:

  1. 的協議和實現它的類,從未有關鍵字funcinit方法的前面。
  2. 在您的班級中,由於您的協議中調用了init方法,因此您現在需要在init方法前加上關鍵字required的前綴。這表明你遵守的協議要求你有這個方法(即使你可能獨立地認爲這是一個好主意)。

所涵蓋的其他人,你的方案應該是這樣的:

protocol Serialization { 
    init(key keyValue: String, jsonValue: String) 
} 

而且作爲一個例子,就是符合該協議的類看起來可能是這樣:

class Person: Serialization { 
    required init(key keyValue: String, jsonValue: String) { 
     // your logic here 
    } 
} 

公告要求需要關鍵字在init方法的前面。

相關問題