2017-03-20 2 views
0

enter image description here동일한 인수 유형을 사용하는 Swift Initializer

잘 모르겠습니다. 보시다시피 이름과 인수 유형이 같은 두 가지 제안이 있습니다.

이 어떤 방법을 결정하는 방법이라고?

호출되는 인수가있는 메소드입니다.하지만 호출하고자하는 것이 계산을 포함하는 init (windSpeedMilesPerHour 매개 변수에 값을 제공하지 않음) 인 경우 어떻게해야합니까? 귀하의 예제에서 모든 불순물의 제거

+0

나는이 방법을 똑같은 이름을 나쁜 아이디어라고 생각 ... – davecom

+1

예, 그렇습니다. 그러나, 나는 이것이 어떻게 허용되는지 궁금하다. –

+0

Weather 구조체 외부에서 Weather를 호출하는 이유는 무엇입니까? –

답변

1

빠른 테스트, 당신에게 답을 알려줍니다

struct S { 
    init(a:Int) { 
     print("first one") 
    } 
    init(a:Int, b:Int=3) { 
     print("second one") 
    } 
} 
let s = S(a:4) // "first one" 

그래서 기본적으로 첫 번째 초기화는 불가능 명시 적 b 매개 변수없이 두 번째 초기화를 호출했다. 그건 바보 같은 짓이야 - 당신은 쓸데없고 무의미한 b에 대한 기본값을 만들었지 만 불법이 아니며 왜 그렇게해야하는지 이유가 없다.

+0

예, 제가 처음 질문 한 것을 알고 있습니다 (제가 질문에서 말했듯이). 그러나 깊이있는 설명이 더 있습니까? –

+2

없이 하나 대신라는 B 매개 변수를 초기화하지 않습니다 이유는 단어의 의미를 이해하지 못하고 "왜"그 질문에, 내가 이미 말한 것 이상 : 그것은 당신이 두 번째 가려했기 때문에 이니셜 라이저는 첫 번째 이니셜 라이저로 단 하나의 매개 변수로 호출됩니다. Swift는 코드의 의미를 결정하는 경험적 방법을 사용합니다. 매우 어리석은 경우이지만 크래시가 발생하지 않으며 컴파일러가 당신을 때 리지 않으므로 원하는 경우 수행하십시오. "왜"가 "장면 뒤에서 일어나는 일"을 의미한다면, 소스를 통해 쟁기질을하고 그것을 알아 내십시오. 스위프트는 오픈 소스입니다. 개인적으로 나는 그것을 블랙 박스로 취급하는 것을 선호합니다. – matt

관련 문제