2014-01-24 71 views
-2

是否有可能在Obj-c中有嵌套方法。我一個試圖做的是初始化時創建一個特定的對象的NSArrayObjective-c代碼塊作爲嵌套方法

NSArray array = @[ 
^{ NSViewController someObject = ... 

    someObject.someObjectProperty = @"Bla"; 

    return someObject}, 

^{ NSViewController someOtherObject = ... 

    someOtherObject.someOtherObjectProperty = @"Bla Bla"; 

    return someObject}, 
]; 

數組包含__NSGlobalBlock__,在這裏我想獲得[someObject, someOtherObject]

該數組返回ViewControllers一疊,我需要在它們中的每一個上設置不同的屬性。

謝謝

+2

目前尚不清楚「嵌套」和「同步」與您的數組初始化有什麼關係。你可以進一步瞭解你想要完成的事情嗎? –

+0

你爲什麼想這樣做? – Chuck

+0

我接管了一個大型解決方案,他們在NSArray中收集對象。我需要掛鉤並添加一些額外的屬性。它會使可讀性更容易。 –

回答

1

如果我理解你正確,你想創建一個本地塊並將其返回值直接添加到數組中。雖然這不是主流方法,但它是可能的:

NSArray *array = @[ 
    (id)^{ 
     id someObject = ... 
     someObject.aProp = @"Bla"; 
     return someObject; 
     }(), // here you immediately execute the local block 
    (id)^{ 
     id someObject = ... 
     someObject.aProp = @"Bla"; 
     return someObject; 
     }() 
]; 
+0

對,謝謝你,我的朋友:-)我幾乎尷尬,我看不到它:-) –

+0

那麼,@ChrisG。,這正是我已經說過的。你正在描述該塊,而不是調用它。通話涉及括號。所以你正在創建一個由塊組成的數組,而不是由塊調用的結果組成的數組。 – matt

2

代碼塊不僅僅是「在未來某個時候執行」。他們可以使用這種方式,但它們當然可以按照您的建議使用;他們是拉姆達。當然,你的語法全錯了,因爲你的描述的是這個塊,而不是,那麼調用吧。 (雖然包含塊的數組也是完全合理的。)

+0

Hov我會在初始化數組內調用它嗎? –

+1

到目前爲止,我不相信你甚至需要撥打電話。爲什麼不是一個方法調用?其實我甚至不相信你需要一個方法調用。如果你只是想將對象插入到你的數組中,爲什麼不插入它們呢?你還沒有解釋你真正想做什麼。 – matt