2012-04-27 3 views
10

저는 현재 objective-c 및 iOS 프로그래밍을 배우고 있으며 한 시간 동안이 미묘한 오류로 인해 작동하지 않는 코드로 인해 어려움을 겪었습니다. 다음 코드를 고려하십시오메소드 이름이 비어 있습니다. 실제로 어떻게됩니까?

@property (strong, nonatomic) NSString *name; 
- (NSString *):name { return @"Some name"; } 

언뜻를 (누군가 새에 대한)이이 name 속성에 대한 오버라이드 (override) 게터 것 같습니다. 그러나 매우 희미한 :은 없어야합니다. 컴파일러/파서/런타임 여기에서 경고/오류 얻을 그래서 내 질문에 실제로 끝나는 무엇입니까?

나는 오류를 보았지만이 메서드를 호출하는 방법을 생각해 봤지만 몇 가지 시도에서는 성공하지 못했습니다. 다음 아래

답변

13

방법 서명 - (NSString *):name 휴식 :

  • - 그것은 (A +와 클래스 메소드 대) 인스턴스 방법입니다.
  • (NSString *) 문자열을 반환합니다.
  • :이 메서드의 이름을 말하면 간단히 "콜론"이라고합니다. :은 메소드가 하나의 매개 변수도 허용한다는 것을 컴파일러에 알립니다.
  • name name이라는 매개 변수가 있습니다.

당신이 타입을 지정하지 않을 경우, 컴파일러는 당신이 id을 의미 가정, 그래서이 방법은 실제로 - (NSString *):(id)hello

이 방법에 유효한 호출이 될 것으로 밝혀 fleshes : [self :@"hello"].

:은 메서드의 유효한 이름이고 컴파일러는 id으로 가정하기 때문에 이상한 일을 실제로 할 수 있습니다. 정말로 원한다면 - :::이라는 방법을 사용할 수 있습니다. 컴파일러는 id 유형의 객체를 반환하고 id 유형의 세 가지 매개 변수를 사용하는 - (id):(id):(id):(id)을 의미한다고 가정합니다. 당신은 그것을 이렇게 부를 것입니다 : [self :@"hello" :anObject :myObject];

+3

+1 '간단히 말해서이 방법의 이름을 말하면 간단 할 것입니다 ... 콜론'. – Perception

+0

실제로 메서드 이름은 "빈 문자열"입니다. 메서드 이름을 말할 때 콜론은 일반적으로 말하지 않습니다 ... 비록 거기에 있더라도 ... 혼란 스럽습니다. 알아요.하지만 영어로 ""와 비슷합니다. 일시 중지 또는 커넥터 (말은하지 않음). – bbum

+0

@bbum 실제로 애플은 공식적인 방법으로 모든 콜론을 말하는 것이라고 말합니다. 지금 당장 문서에서 줄을 찾으십시오 ... –

3

당신이 게시 한 것과 같은 선언 방법은 드문 것 (그리고 열악한 스타일, imo)입니다. 목표 -C는 장황하다. 방법은 다음과 같이 정리할 수

  1. 첫 번째 문자 : - 또는 + 중 하나. -은 인스턴스 메소드이고, +은 클래스 메소드임을 의미합니다.
  2. 괄호 안의 값 : 메서드의 반환 유형입니다. 귀하의 예제에서이 메서드는 (NSString *)을 반환합니다.
  3. 나머지는 매개 변수와 함께 메서드 이름입니다. 매개 변수없이 이름을 가질 수 있습니다.이 경우 메소드 이름은 :이되지 않습니다. 예 : - (void) reload; 이것은 값을 반환하지 않고 매개 변수를 사용하지 않는 메서드입니다.
  4. 매개 변수를 사용하는 메서드는 메서드 이름에 혼합되어 일반적으로 형식을 선언합니다 (예와 달리).예 : - (NSString *) reverseString:(NSString *) stringToReverse;이 예제에서 메서드 이름은 reverseString:이고 메서드 정의에 stringToReverse이라고하는 NSString*이라는 매개 변수 하나만을 사용합니다.
  5. 일반적으로 유형이없는 :이 표시되는 경우 - (float) addThreeValues:::과 같을 수 있습니다.이 메서드는 float를 반환하고 3 개의 매개 변수를 사용합니다. 이것은 적절한 정의가 될 것입니다. 왜냐하면 세 개의 값은 우리가 방금 추가 한 것이므로 어떤 순서로 제공되는지는 중요하지 않기 때문입니다.
관련 문제