2015-11-08 71 views
2

我是Objective-c的新手,我認爲這應該很簡單,但不知何故我無法弄清楚。如何從數組中的對象調用方法?

我需要調用存儲在NSArray中的對象的方法。 Java代碼將是:myArray[0].getMyValue();

所以我在互聯網上看到,在Objective-c它應該看起來像這樣:[[myArray objectAtIndex: 0] getMyValue]。不幸的是,這沒有奏效。

我在互聯網上發現了其他解決方案,但都沒有工作。

所以我希望你們能幫助我?

更新

我得到這兩個錯誤消息:

  • 對於選擇 'getMyValue'
  • 沒有一個已知實例方法發送 'ID' 不兼容類型的參數 'CGFloat的' (又名'雙')
+2

詳細信息。你是什​​麼意思,它不起作用?它不會編譯?它在運行時崩潰嗎?無論哪種方式,錯誤是什麼? – Avi

+0

它不起作用,您需要將對象作爲參數發送給您稱爲 –

+1

@ Mr.T的方法,這是完全錯誤的。爲什麼他應該提供該對象作爲參數,如果他只是想調用該對象的實例方法? –

回答

7

這不起作用,因爲Objective-C不知道數組中的對象的類型是什麼。

幸運的是,Apple在Xcode 7中添加了輕量級泛型,它允許您創建類型化數組。只有當你打算在數組中有一種類型的對象時,這當然會起作用。語法如下:

NSArray<NSString *> *stringArray; 

如果您計劃有不同類型的數組中的對象,那麼你需要將對象轉換爲你的類型,才能夠調用你的方法。這將是這樣的:

[((YourObject *)[myArray objectAtIndex: 0]) getMyValue]; 

而作爲@邁克爾在評論中指出,另一個和更好的方式來做到這一點是:

[((YourObject *)myArray[0]) getMyValue]; 
+0

你可以提供一個簡單的測試方法,稱爲getMyvalue和你稱之爲你在這裏提到的結果? –

+0

謝謝!這工作。 – Dalibor

+0

通過使用語法糖索引語法:'[myArray [0] getMyValue]'或(如果getMyValue是一個屬性)'myArray [0] .myValue',您可以使它更像您的原始代碼。您希望進行所有常規檢查以確定是出界還是面臨例外。 – Michael

3

對象與id類型存儲在NSArray,所以你可以將這個對象轉換爲你想要的對象類型。例如:

NSNumber *myNumber = (NSNumber *)[NSArray objectAtIndex:0]; 
[myNumber myMethod]; 
+0

有沒有辦法在一行代碼中有這個? – Dalibor

+1

@Dalibor看到我的答案,我向你展示瞭如何在一行中寫這個。 –

相關問題