2013-07-25 3 views
4

일부 메소드의 경우 값의 범위 (235에서 245)를 반환하기를 원합니다. (: 235, 길이 : 10 예를 들어, 위치) 나는이 잘 한 반환 값이 integer 범위로 작동목표 C : NSRange 또는 이와 유사한 float?

- (NSRange)giveMeARangeForMyParameter:(NSString *)myParameter; 

반환 값으로 사용하여이 NSRange했다.

하지만 이제 float 범위 (예 : 위치 : 500.5, 길이 : 0.4)를 반환해야하는 문제가 있습니다. 나는 에서 NSRangeNSUIntegers으로 typedefed 구조체임을 읽었습니다. float 범위에 대해 다른 구조체를 typedef 할 수 있습니까? 그렇다면 NSMakeRange(NSUInteger loc, NSUInteger len)과 비슷한 방법으로 float 범위를 만들 수 있습니까?

+1

NSPoint (메시지가 너무 짧음)를 사용하십시오. –

+0

1. 예, 가능합니다. 2. 예,있을 수 있습니다. –

+0

@RamyAlZuhouri : NSPoint는 여러 플랫폼 (iOS가 NSPoint를 모르는 경우)에 도착하면 손대지 않습니다 ... – FrankZp

답변

7

이러한 개체 뒤에 struct의 그것을 만들기 위해 더 좋을 것이다 너무 간단 (당신은 CGPoint 또는 CGSize, 또는 NS... 등가물에서 선택할 수 있습니다) 자신의 :

typedef struct FPRange { 
    float location; 
    float length; 
} FPRange; 

FPRange FPRangeMake(float _location, float _length) { 
    FPRange res; 
    res.location = _location; 
    res.length = _length; 
    return res; 
} 
+0

고마워요! 사실 아주 간단합니다. 멀티 플랫폼 개발과 관련하여이 솔루션은 그래픽 라이브러리 (Mac OS와 iOS는 서로 다른 객체를 가지고 있습니다 ...)에서 페어 객체를 사용하는 것보다 낫습니다. – FrankZp

+0

'FPRangeMake' 메소드의 이름을 지정하는 것이 좋습니다. NSMakeRange가 있지만 CGPointMake, CGSizeMake와 유사한 기능들 사이에는 고유하다는 것을 알고 있습니다. – Sulthan

+0

@Sulthan 당신이 맞습니다. 목표 C를 몇 달 동안 사용하지 않아서 명명 규칙을 잊어 버렸습니다. 감사! – dasblinkenlight

1

예, 당신도 갈 수 NSRangeNSMakeRange의 정의를 보면 그것을 어떻게 볼 (NSRange.h으로는 얻을 수있는 가장 쉬운 방법은 엑스 코드에서 NSRange 이름을 '명령을 클릭'할 수있다) :

당신은 그래픽 라이브러리에서 여러 "쌍 객체"중 하나를 다시 사용할 수 있지만
typedef struct _NSRange { 
    NSUInteger location; 
    NSUInteger length; 
} NSRange; 

NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) { 
    NSRange r; 
    r.location = loc; 
    r.length = len; 
    return r; 
} 
+0

'typedef struct'에서 단지'NSRange' 대신'_NSRange'를 사용하는 이유는 무엇입니까? –

+0

@JonathanLin 애플사에서 사용하는 명명 규칙 (내부/개인용) – Wain

0

2 개의 부동 소수점이있는 기존 구조체를 원하고 GLKit을 포함해도 괜찮 으면 GLKVector2를 사용할 수 있습니다. 또한 Make 함수가 있습니다.

관련 문제