2014-06-13 1 views
3

objective-c를 사용하여 프로그램을 작성합니다. 오류가 발생했습니다 (이니셜 라이저 요소는 컴파일 타임 상수가 아닙니다). 왜 발생 하는지를 확신 할 수 없습니다. 배열을 초기화하려고합니다. 나는 또한 xcode6을 사용하고있다. 내 질문은 다음과 같습니다. 어떻게 Objective-c에서 이것을 올바르게 다시 작성할 수 있습니까? 그리고 새로운 Swift에서 어떻게 생겼을까요? 또한 오류가있는 이유는 무엇입니까?이 질문에 다른 스레드를 구현하는 방법을 따르지 않습니다.이니셜 라이저 요소가 컴파일 시간 상수가 아님

Name.h

#import <Foundation/Foundation.h> 

@interface Name : NSObject 
@property (nonatomic, retain) NSMutableArray *myArray; 

@end 

Name.m

#import "Name.h" 

@implementation Name 

NSMutableArray *myArray = [[NSMutableArray alloc] init]; //error shows up here - initializer element is not a compile-time constant 

[myArray addObject:@"Object 1"]; 

[myArray addObject:@"Object 2"]; 

[myArray addObject:@"Object 3"]; 

@end 
+2

한 번 질문 해주세요. 또한 이것을 신속하게 번역하고 싶다면 계속해서 자신을 시험해보십시오. 문제가 있으면 여기에 특정 질문을하십시오. –

+1

삭제 된 질문에 대한 귀하의 의견 (http://stackoverflow.com/q/24252665/365496)에 대한 답변입니다. 그렇습니다.'uniform_real_distribution'과'mt19937' 엔진은 꽤 균일해야합니다. 또한 '' 라이브러리를 사용할 때'srand()'를 사용하여 시드 할 필요가 없다는 것에주의하십시오. 엔진 초기화 ('mt19937')이면 충분합니다. – bames53

+0

[컴파일러 오류 : "이니셜 라이저 요소가 컴파일 타임 상수가 아닙니다"] (http : // stackoverflow.com/questions/6143107/compiler-error-initializer-element-is-not-a-compile-time-constant) –

답변

5

에만 방법

시도 재정의

-(id) init 
{ 
    self = [super init]; 
    if(self) 
    { 
    myArray = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 
+0

addObject 메소드는 어디에 두어야하나요? – user3681670

+0

NSMutableArray * myArray = @ [@ "개체 1", @ "개체 2", @ "개체 3"]; –

+0

이것은 init 메소드 다음에 오는가요? – user3681670

3

오류 내부 변수를 초기화하기한다 @"test"는 상수

NSString* abcd = @"test"; 

때문에 컴파일 후 변경하지 않습니다 :

오류가 말하는 것처럼, 당신은 단지 클래스의 구현에 컴파일 시간 상수를 초기화 할 수 있습니다

이 작동합니다 귀하의 코드입니다.

[[NSMutableArray alloc] init]은 상수가 아니므로 오류가 발생한 것입니다. 배열을 초기화하려면 init 메서드를 구현해야합니다.

당신은 여전히 ​​빠른에있는 NSArray를 사용하거나 신속한 배열 유형을 사용할 수 있습니다 : 귀하의 질문의 신속한 부분에 대한

스위프트

. Working with Cocoa Data Types Documentation 또는 Apple collections types Swift Documentation을 확인할 수 있습니다.

여전히 빠른에있는 NSArray를 사용하려면

:

var array:NSMutableArray = NSMutableArray() 
array.addObject("test1") 
array.addObject("test2") 
// or 
array:NSMutableArray = ["test1", "test2"] 

을 또는 당신은 신속 배열을 사용하려면 : 당신이 "건물 설정을 편집 할 수

var array:String[] = ["test1", "test2"] 
// or 
var array:String[] = String[]() 
array.append("test1") 
array.append("test2") 
+0

고마워요 ... 배열이 상수가 아니며 컴파일 시간 후에 변경된다는 것을 어떻게 알 수 있습니까? 초기 코드에서는 문자열을 사용하고 있습니까? – user3681670

+1

alloc 및 init은 NSMutableArray 클래스의 메서드입니다. 컴파일러는 코드를 실행하는 동안 해당 메소드를 호출하기 전에 반환 할 메소드를 알 수 없습니다. 컴파일러는 컴파일 타임에 메소드가 리턴하는 것을 알 수 없습니다. – olicarbo

1

시도를 "->"소스를 컴파일하여 ""Objective-C++ "로 변환하면 문제를 해결할 수 있습니다.

+0

저를 위해 일하십시오! 감사 – vidalbenjoe

관련 문제