2014-09-22 40 views
0

我試圖將我的應用程序從目標c轉換爲swift,並且除了應用程序購買工作外,我擁有一切。 我在項目導入的目標C輔助類,但是我無法做RequestProductsCompletionHandler部分iap - 從目標c到swift的轉換

老客觀C版我的代碼

[[MTIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) { 
    if (success) { 
     _products = products; 

     if([[self appData] isPro] == FALSE) 
      [[self bUpgrade] setUserInteractionEnabled:TRUE]; 
    } 
}]; 

,我想將此部分轉換爲目標c,但到目前爲止,我一直無法轉換requestProductsWithCompletionHandler部分

任何人都可以幫忙嗎?

我已經嘗試創建一個使用

requestProductsWithCompletionHandler(sucess: Bool, products : NSArray) 

完成處理器相同的是在目標C,但我得到的編譯器錯誤「額外的參數‘產品’呼叫」和「預期的會員名稱或構造函數調用類型名稱後「。 如果我嘗試它沒有參數我得到「參數#1在通話中缺少參數」

+0

你有什麼試過,你到底在哪裏跑到麻煩?你得到編譯錯誤嗎?運行時錯誤? – 2014-09-22 22:35:09

+0

我已經嘗試創建完成處理程序與使用「requestProductsWithCompletionHandler(成功:Bool,產品:NSArray)」在目標c中一樣「但我得到編譯器錯誤」額外參數'產品'在調用「和」預期成員名稱或類型名稱後的構造函數調用「。如果我嘗試它沒有參數我得到「參數#1在通話中缺少參數」 – 2014-09-22 22:39:40

+0

好的。如果您編輯了您的問題並添加了您隨該錯誤一起嘗試的代碼,這將有所幫助。這樣,我們更容易看到你來自哪裏,並指向正確的方向。 – 2014-09-22 22:44:13

回答

2

在Swift中,您的完成處理程序將是closure。語法是半類似於Objective-C的塊,但是,而不是定義塊外的參數:

^(BOOL success, NSArray *products) { /* ... */ } 

你定義它們的閉包:

{ (success: Bool, products: [AnyObject]!) in /* ... */ } 

,那麼你對requestProductsWithCompletionHandler通話應該是這個樣子:

MTIAPHelper.sharedInstance().requestProductsWithCompletionHandler { 
    (success: Bool, products: [AnyObject]!) in 

    if success { 
     // etc. 
    } 
} 

您也可以讓斯威夫特推斷參數類型爲您提供:

MTIAPHelper.sharedInstance().requestProductsWithCompletionHandler { 
    (success, products) in 

    if success { 
     // etc. 
    } 
} 
+0

很酷。我收到錯誤'[AnyObject]!'不是'NSArray'的子類型,雖然 – 2014-09-22 22:55:35

+0

對不起,我使用了錯誤的參數類型。請參閱編輯。 – 2014-09-22 23:05:54

+0

謝謝,讓它工作 – 2014-09-22 23:11:30