2013-06-27 24 views
5

我有什麼方法可以使用客體c類型,例如NSRange,CGRect等(它們是結構體)來自C?我使用目標c運行時訪問目標c類,但一些方法返回並接受目標c類型是結構,我的問題是如何使用從C返回的目標c結構?使用來自C的目標c類型

+1

不能這樣做究竟是什麼?請參閱下面的答案。如果你顯示一些代碼,我可以擴展它來包含一些例子。 –

+1

這與objective-c的「運行時」(意味着來自objc/runtime.h的方法)沒有任何關係,但通常只是C類型。因此,我已經移除了標籤。 –

回答

7

只要你導入正確的頭文件,當然你可以,那些簡單而簡單的C結構。具體而言,您可以在<Foundation/NSRange.h>CGRect<CoreGraphics/CGGeometry.h>中找到NSRange

Objective-C-NSRangeCGRect和類似的結構中沒有任何特定的。

+0

好點,+1 – duDE

+0

的問題是因爲他包含@class NSString;在開始的那一行,所以可以編譯爲C.但是對於這種情況,我會簡單地做出等價的C結構。 – user232343

+1

夠公平的。我想你可以結合我的答案和duDE的 –

2

NSRange可以通過簡單的使用定義:

typedef struct { 
    unsigned long location; 
    unsigned long length; 
} NSRange; 

的CGRect是有點棘手:

struct CGRect { 
    CGPoint origin; 
    CGSize size; 
}; 
typedef struct CGRect CGRect; 

struct CGPoint { 
    CGFloat x; 
    CGFloat y; 
}; 
typedef struct CGPoint CGPoint; 

struct CGSize { 
    CGFloat width; 
    CGFloat height; 
}; 
typedef struct CGSize CGSize; 

typedef float CGFloat; // 32-bit 
typedef double CGFloat; // 64-bit 
+3

!雖然不需要爲已定義的結構重新發明輪子。公共標題出於此目的;) –