2014-06-07 43 views
7

兼容的封閉我試圖宣佈一個閉合符合以下Objective-C的塊:夫特:定義與目標C塊

typedef void(^TyphoonDefinitionBlock)(TyphoonDefinition *definition); 

這樣的:

var config: TyphoonDefinitionBlock = { (definition: TyphoonDefinition) in 
    definition.injectProperty("quest", with: nil) 
} 

。 。 。並得到以下錯誤。 (見圖)。

enter image description here

什麼是做到這一點的正確方法是什麼?

+0

除了蘋果員工,我們都是Swift開發的新手。 :-) –

回答

5

您需要聲明definition作爲ImplicitlyUnwrappedOptionalTyphoonDefinition!),因爲在Objective-C中它是一個可以爲零的指針。

swift中的正常變量(和常量)不能爲零。它們必須包含一個值。

+0

(facepalm)謝謝。將在10分鐘內接受。 –

+1

@JasperBlues哈哈無後顧之憂。我也只是說,自從它在不到一週前宣佈以來,我們對Swift都是相當新的;)現在我們都只是深入瞭解語言的細節並找出顯而易見的事情,回想起來 – drewag

1

想解釋一下它的細節中,開始你的一段代碼

目標C typedef void(^TyphoonDefinitionBlock)(TyphoonDefinition *definition);

在斯威夫特你讓這樣的 typealias TyphoonDefinitionBlock = (definition:TyphoonDefinition?)->Void

如果喲你想在特定的時刻之後親密地打電話給你的對象,你需要做一個屬性。 var typhoonDefinitionCompletion:BlockTyphoonDefinitionBlock?

你可以使用typhoonDefinitionCompletion,你可以像這樣引發回調消息。 self.typhoonDefinitionCompletion!(definition:passyourtyphoneDefinition)