2012-09-04 65 views
1

我一直在建立一個iOS應用和我的ViewControllers之一已成爲全像:移動功能,以單獨的類

CGPoint randomPoint() 
{ 
    //Code goes here 
} 

我現在想將其移動到A級(或協議,我不知道什麼會爲我工作),在VC導入並調用像以前一樣:

p=randomPoint(); //NOT A.randomPoint(), [A randomPoint] or whatever 

我嘗試使用C++類模板,但它與CGPoint,和的CGRect這麼久的問題。

我該如何做到這一點?

+0

爲什麼不製作靜態內聯指令?他們在任何頭文件'.h'文件中都足夠快樂。 – holex

回答

3

如果您想知道如何將C函數描述爲您正在描述的函數,那麼最佳做法是將它們移動到具有有意義名稱的單獨.h文件中。例如MyGeometry.h

確保你給你的函數給出一個描述性的名稱,如:

static inline CGPoint CGPointMakeRandom() { 
    // your code 
    return point; 
} 
+0

非常感謝!這像一個魅力。所以我不需要單獨的實現文件,我可以在.h文件中寫入所有內容? – Hristo

+0

你可以添加一個實現文件,但是這個函數往往非常簡單,以便內聯定義它們會更加方便。隨着複雜性的增加,您可能希望將實現移至.m以避免混亂.h –

+0

另請參見:http://stackoverflow.com/questions/7762731/whats-the-difference-between-static-and-static-內聯函數 –

0

你能與類方法獨立客觀的C類。

在頭文件中聲明這樣的方法(假設你想叫它

#import <UIKit/UIKit.h> 

@interface pointHelper : UIViewController 

    +(CGPoint) randomPoint; 

然後在.m文件

@implementation pointHelper 
    +(CGPoint) randomPoint{ 
     //// implementation 
    } 

當你想喚起的方法另一個文件

#import "pointerHelper.h" 

然後您將能夠訪問像這樣的方法...

CGPoint thePoint = [pointHelper randomPoint]; 

或者,如果你有一個類的對象..

CGPoint thePoint = [[pointHelperObject class] randomPoint]; 

這是做一個更好的方式,因爲它使你的代碼更加清晰。 [pointHelper randomPoint]告訴你爲什麼你在喚起方法以及它在做什麼。你正在使用一個具有積分功能的類,並且你正在使用它來獲取一個隨機點。你不需要一個對象來喚起這個方法,因爲它是由類抽象地控制的。注意不要試圖在類方法中訪問類的屬性。

+0

或者,如果您嘗試使用c方式,您可以使用pmd的答案。雖然我建議你以客觀的方式來做,因爲它更清晰。 – AdamG

+0

Cocoa Touch使用C函數來處理CGPoint創建,而不是類方法,可能是因爲點具有這樣一個簡單的結構。 我認爲最好保持這種做法。 供參考檢查他們的幾何。h文件 –

+0

是的,我猜這是個人喜好和效率的問題。 – AdamG