2017-10-21 21 views
-3

배열을 내 테이블 뷰 컨트롤러의 멤버로 갖고 싶습니다. 배열은 데이터 소스가됩니다.뷰 컨트롤러의 멤버 변수로 이러한 배열 간의 차이점

다음과 같은 멤버 변수 배열의 차이점과 장단점은 무엇입니까?

class BinViewController: UITableViewController, WKNavigationDelegate { 
    var peopleArray1 = [String]() 
    var peopleArray2: [String] = [] 
    var peopleArray3: [String]! 
    var peopleArray4: [String]? 
+4

이것은 신속한 속성 선언 및 초기화에 대한 기본적인 질문입니다. Swift 책을 읽었습니까? 이 네 줄의 코드에 대해 어떤 질문을 가지고 있습니까? 그들의 차이점에 대해 정확히 이해하지 못하는 이유는 무엇입니까? 귀하의 설명과 함께 귀하의 질문을 편집하십시오 (의견을 게시하지 마십시오). – rmaddy

답변

1

이 두 사람은 기본적으로 같은 일을 수행

var peopleArray1 = [String]() 
var peopleArray2: [String] = [] 

그들은 선언을 입력 [String]의 빈 배열을 초기화합니다.


반면에이 두, 또한 유사하다 :

var peopleArray3: [String]! 
var peopleArray4: [String]? 

둘의 배열 자체가이 선언되고 그들이이 현재 nil, 수 있습니다.

peopleArray3은 문자열의 암시 적으로 래핑되지 않은 선택적인 배열이며, peopleArray4은 선택적으로 문자열 배열입니다.

peopleArray3의 의미는 사용하기 전에 값을 설정한다는 것을 컴파일러에게 말하고 있다는 것입니다. 값이 nil 인 동안 액세스하려고하면 앱이 중단됩니다. peopleArray4를 들어

, 당신은 배열이 언제든지 nil 수 있습니다 컴파일러를 말하는거야, 그래서 당신은 당신이 그것을 액세스하기 전에 peopleArray4nil 아닌지 확인해야합니다.

1

나는 당신이 스스로에게 물어야 할 올바른 질문이 없다고 생각합니다. 장점이나 단점이 없습니다. 필요한 요소와 구현하려는 논리를 기반으로 클래스 멤버를 초기화하는 방법이 있습니다.

  • var peopleArray1 = [String]() 컴파일러에게 말하면 빈 문자열 배열을 생성 해주세요. 선언되고 초기화되었습니다. 또한 두 번째 명령문과 비교하여 배열의 유형을 컴파일러에서 추론하도록합니다.

  • var peopleArray2: [String] = [] 첫 문장과 99 % 동일합니다. String의 빈 배열을 작성 중입니다. 선언되고 초기화되었습니다. 여기서 유일한 차이점은 배열의 유형을 지정한다는 것입니다. 컴파일러가 배열 유형을 추측하도록하지 마십시오. var variable:TypeVariable = .... 당신이 읽을 수있는 코드

  • var peopleArray3: [String]!은 이전 2 초기화에 비해 꽤 다르다을 이길 수 있기 때문에 때 애플에 의해 권장 당신의 변수 구성원의 유형을 추론하도록 컴파일러 수 있도록합니다. 먼저 Swift는 매우 강력하게 형식화 된 언어이므로 모든 변수를 사용하기 전에이를 초기화해야합니다. 실험 할 수있는 한 가지는! 또는? 그리고 컴파일러에서 문제를 경고 해 줄 것입니다. 때때로 당신은 단지 초기 값이 무엇인지 알지 못하지만, 당신은 한 순간에 가치를 가질 것입니다. 변수는 다음 두 가지 상태 일 수 있습니다. 값이 없거나 값이 인 경우이라고합니다.이 문장을 사용하면 문자열 배열을 생성하고 싶습니다.이 배열은 nil 일 수도 있고 String 값을 가질 수도 있습니다. 배열을 인쇄하면 "Optional ([String])"과 같은 메시지가 나타납니다. 귀하의 선택의 가치를 얻으려면 값을 가지고있을 때만 느낌표 으로 포장을 풀어야합니다. 그렇지 않으면 프로그램이 중단됩니다. 여기에이 초기화가 있습니다. 컴파일러는 나중에 배열에 값이 있음을 알기 때문에 걱정하지 않아도됩니다.

  • var peopleArray4: [String]?은 이전과 동일합니다. 가장 큰 차이점은 peopleArray 값에 액세스 할 때마다 자신의 값을 감싸기 위해 느낌표를 사용해야한다는 것입니다. Optionals를 사용하는 데에는 장점/단점이 없습니다. 배열이 0이면서 값이 더 있거나 정적 배열 인 경우 ...