2012-11-25 51 views
2

的Objective-C是ANSI C的超集GNU C,you can nest one function in another function ...這樣...是否可以窩在Objective-C的另一個函數中的一個函數

float E(float x) 
{ 
    float F(float y) //objective-C compiler says expected ; at end of declaration 
    { 
     return x + y; 
    } 
    return F(3) + F(4); 
} 

是否有可能在Objective-C中做到這一點?

我知道塊和NSInvocation對象,它可以模擬上面的C代碼。但是,你可以在Objective-C的另一個函數的詞彙範圍內定義一個函數嗎?喜歡的東西...

-(int) outer:(int)x 
{ 
    -(int) inner:(int)y //use of undeclared identifier inner 
    { 
     return x * 3; 
    } 
    return inner(x); 
} 

回答

4

你不能,但你可以很容易地得到與塊

int outer(int i) 
{ 
    int (^inner)(int) = ^(int x) 
    { 
     return x * 3; 
    }; 

    return inner(i); 
} 
1

你不能僅僅因爲在的ObjectiveC方法附加到類和C一樣相同的行爲++ ,這意味着函數內部總是存在一個隱含的self

你應該如何調用嵌套在另一個函數中的函數?使它成爲一種分類方法沒有多大意義。只有調用它的方法是使它靜態(但它似乎真的過於複雜)

您應該使用塊,可用於OS X上的C,C++和ObjectiveC或類似函數的東西,如果您要去的ObjectiveC++。

+0

您在第一句中混合了術語。方法和功能是兩個不同的東西。 'self'指針只適用於方法。 Objective-C支持函數(沒有'self'指針)。當然,這些功能不受任何課程束縛。我相信你知道這一點,但我想爲其他人澄清這一點。 – rmaddy

+0

它支持C函數,因爲它是C的超集,但它不支持ObjectiveC函數,因爲它們是必需的方法。因此,ObjectiveC函數必須是方法,並且始終具有「自我」引用。實際上,如果您嘗試在類之外聲明具有ObjectiveC語法的函數,則給定的錯誤是_missing方法聲明_的上下文。 – Jack

相關問題