2013-11-01 20 views
0

該數據結構(C++)我在C++該數據結構(結構):替代爲在Objective-C

struct Vector3f 
{ 
    float x; 
    float y; 
    float z; 

    Vector3f() 
    { 
    } 

    Vector3f(float _x, float _y, float _z) 
    { 
     x = _x; 
     y = _y; 
     z = _z; 
    } 
}; 

我已被最近被學習和使用的Objective-C。我發現在Objective-C中有很多我無法做到的事情,我可以在C++中完成。所以,我希望能夠通過構造函數在Objective-C中做到這一點。我知道Objective-C不支持像C++這樣的函數重載。所以,第一個構造函數不是必需的。

+0

那麼你有什麼嘗試? – pjs

+0

我用變量創建了一個簡單的C++結構。然後生成一個函數,您可以輸入三個變量,它會創建一個Vector3f結構併爲每個變量賦值:'vec3f.x = _x;'。並返回該Vector3f – retsgorf297

回答

1

只需將使用三個屬性:

@interface Vector : NSObject 

@property(nonatomic, assign) float x, y, z; 

- (id)init; 
- (id)initWithX:(float)x y:(float)y z:(float)z; 

@end 

@implementation Vector 

- (id)init { 
    // Members default to 0 implicitly. 
    return [super init]; 
} 

- (id)initWithX:(float)x y:(float)y z:(float)z { 
    if (self = [super init]) { 
     self.x = x; 
     self.y = y; 
     self.z = z; 
    } 

    return self; 
} 

@end 

注意的是,這裏覆蓋init是可選的,因爲它是所有調用父類的方法init

+0

謝謝。這回答了我的問題。我會在你解決它的時候標記它,當它讓我。 – retsgorf297

+0

如果有任何類被子類化的機會,它應該有一個指定的初始化程序,另一個初始化程序應該在'self'上調用它。所以'-init'應該只是'return [self initWithX:0 y:0 z:0];'。 –