ObjectiveC 문자열에서 정수 구문 분석


119

배열에서 문자열 (정수 포함)을 추출한 다음 함수에서 int로 사용하려고합니다. intValue를 사용하여 int로 변환하려고합니다.

여기 제가 시도한 코드가 있습니다.

  NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"];
  [_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]];

이 오류가 발생합니다.

'loggedIn :::'의 인수 3을 전달하면 캐스트없이 정수에서 포인터를 만듭니다.

뭐가 문제 야?


난 당신이 필요하지 않은 추측 (int)부분
라노

2
login :::은 어떻게 선언됩니까? 특히 예상되는 세 번째 매개 변수의 유형은 무엇입니까?
Vladimir

당신이 그것을 필요로하지 않는다는 것은 사실이지만 그가보고있는 오류로 이어지지는 않을 것입니다.
Chuck

2
호기심에서 어떤 언어에서 왔습니까? 나는 사람들이 Objective-C 질문을하는 것을 보았습니다. 당신의 loggedIn:::방법 과 같은 방법을 호출 한 곳에서 일을하는 것은 분명히 비 Objective-C 방법입니다.
kubi

1
아니요, 정말입니다 loggedIn:::. 나머지 선언은 선택 자의 일부가 아닌 매개 변수 이름입니다. 관용적으로는 - (void)loggedIn:(NSString *)tusername password:(NSString *)tpassword userID:(int)userId. 그리고 그것을 [_appDelegate userIsLoggedIn:usernameField.text password:passwordField.text userID:[[_returnedArguments objectAtIndex:2] intValue]];.
Chuck

답변:


267

이 질문에 대해 무엇이 그렇게 어려웠는지는 모르겠지만 이렇게 할 수있었습니다.

[myStringContainingInt intValue];

다음을 수행 할 수도 있습니다.

myStringContainingInt.intValue;


2
우리가 거기에 다른 언어에서 오는 noobs에 그냥 들어 [myStringContainingInt intValue];도 같이 쓸 수 있습니다myStringContainingInt.intValue;
ToddBFisher

5
내부 숫자 myStringContainingInt가 너무 커서 32 비트 (서명 된 이후 실제로 31 비트)에 맞지 않으면 어떻게됩니까 ?
Josh Hinman

이 경우에있는 longValue를 사용한다
dulgan

1
정확한 longLongValue
Leo Flaherty

5
-[NSString intValue]예상 한대로 정확하게 행동하지 않을 수 있다는 점에 유의하는 것이 중요합니다 . 로부터 문서 : 문자열이 숫자의 유효한 진수 텍스트 표현으로 시작하지 않는 경우이 속성은 0이다. 예를 들어 [@" 2 asdghjk" intValue]는를 반환 2합니다.
zekel 2015

8

[str intValue] 또는 [str integerValue]와 같은 문자열을 변환 할 수 있습니다.

integerValue 수신자 텍스트의 NSInteger 값을 반환합니다.

  • (NSInteger) integerValue 반환 값 10 진수 표현을 가정하고 문자열 시작 부분의 공백을 건너 뛰는 수신자 텍스트의 NSInteger 값입니다. 수신자가 숫자의 유효한 십진 텍스트 표현으로 시작하지 않으면 0을 반환합니다.

자세한 내용은 여기를 참조 하십시오.


3
똑같은 것에 대한 많은 답변이 이미 여기에있는 후에 대답합니까?
Christian Stewart

7
장난 해? 문자열이 "0"이면 어떻게됩니까? 오류 또는 올바른 구문 분석입니까? Apple이 예외를 싫어하는 것은 슬프다. 이것이 바로 필요한 곳이기 때문이다.
phreakhead

1
NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"];

_returnedArguments의 배열 NSStrings들에서 which UITextField text재산권 기대된다. 변환 할 필요가 없습니다.

구문 오류 :

[_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]];

_appDelegate에 passwordField속성 이있는 경우 다음을 사용하여 텍스트를 설정할 수 있습니다.

[[_appDelegate passwordField] setText:[_returnedArguments objectAtIndex:2]];

나는 당신이 이상한 메소드 이름과 어색하게 작성된 호출로 인해 근본적으로 쫓겨 났다고 생각합니다. 속성은 "문자열을 예상"하지 않습니다 (그 의미가 무엇이든) — 메서드 passwordField.text의 두 번째 인수 이며 세 번째 인수입니다. 속성에 아무것도 전달되지 않습니다. loggedIn:::[[_returnedArguments objectAtIndex:2] intValue]
Chuck

나는 메소드 이름을 오류로 선언한다. 코드가 무엇을하려고하는지 추론한다 ...
falconcreek

0

기본적으로의 세 번째 매개 변수 loggedIn는 정수가 아니어야하며 어떤 종류의 객체 여야하지만 메소드 호출에서 매개 변수의 이름을 지정하지 않았기 때문에 확실하게 알 수 없습니다. 확실히 볼 수 있도록 메서드 서명을 제공합니다. 아마도 그것은 NSNumber또는 무언가 가 필요합니다 .


1
반드시 객체 일 필요는 없습니다. int*C의 기본 사항을 배우지 않고 Objective-C를 작성하는 많은 사람들이 매개 변수 유형이 구문의 일부로 별을 포함한다고 가정하기 때문에 그는 메소드를 취하는 것으로 잘못 선언했을 수 있습니다 .
Chuck

네, 틀 렸습니다. 당신이 원하는 것은 단지 int (또는 더 좋은 것은 NSInteger, 같은 것입니다). Objective-c 객체 앞에 * 기호 만 필요하며 int는 객체가 아니며 기본 데이터 유형입니다. 따라서 메서드 서명을 (int) 또는 (NSInteger)로 변경하면 수정해야합니다.
Jorge Israel Peña

0

국제 사용자는 문자열 .에서 사용할 때 값이 혼합되거나 nil이되는 경우 이외의 소수 구분 기호를 사용할 수 있습니다 intValue.

예를 들어, UK에서 1.23작성된 1,23수 있도록 1.777같은 사용자에 의해 입력 될 1,777뿐, .intValue일 것이다 1777하지 1(절단)를.


nil 일 수있는 로케일 인수를 기반으로 입력 텍스트를 NSNumber로 변환하는 매크로를 만들었습니다 (nil 일 경우 장치 현재 로케일을 사용함).

#define stringToNumber(__string, __nullable_locale) (\
(^NSNumber *(void){\
NSLocale *__locale = __nullable_locale;\
if (!__locale) {\
__locale = [NSLocale currentLocale];\
}\
NSString *__string_copy = [__string stringByReplacingOccurrencesOfString:__locale.groupingSeparator withString:@""];\
__string_copy = [__string_copy stringByReplacingOccurrencesOfString:__locale.decimalSeparator withString:@"."];\
return @([__string_copy doubleValue]);\
})()\
)

-1

내가 제대로 이해하면, 당신은 당신의 변환해야 NSString에를 int? 이 코드의 평화를 시도하십시오.

NSString *stringWithNumberInside = [_returnedArguments objectAtIndex:2];
int number;
sscanf([stringWithNumberInside UTF8String], "%x", &flags);

4
NSString에는 intValue메소드가 있습니다. developer.apple.com/iphone/library/documentation/cocoa/…
Chuck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.