좋아, Xcode를 7.3으로 업데이트하고 이제 다음 경고가 표시됩니다.
‘var’매개 변수는 더 이상 사용되지 않으며 Swift 3에서 제거됩니다.
이 함수에서 var를 사용해야 할 때이 문제를 해결하는 방법 :
public func getQuestionList(var language: String) -> NSArray {
if self.data.count > 0 {
if (language.isEmpty) {
language = "NL"
}
return self.data.objectForKey("questionList" + language) as! NSArray
}
return NSArray()
}
답변
새 변수에 할당하려고 했습니까?
public func getQuestionList(language: String) -> NSArray {
var lang = language
if self.data.count > 0 {
if (lang.isEmpty) {
lang = "NL"
}
return self.data.objectForKey("questionList" + lang) as! NSArray
}
return NSArray()
}
답변
함수 매개 변수에서 Var를 제거하는 방법에 대한 논의는 GitHub : Remove Var Parameters 의이 제출에 완전히 문서화되어 있습니다.
이 문서에서 사람들은 종종 var
매개 변수와 inout
매개 변수를 혼동 합니다. var
파라미터는 단순히 함께하면서 파라미터 함수의 문맥 내에서 변경할 수 있음을 의미 inout
파라미터 반환 지점에서 파라미터의 값은 함수 및 발신자의 상황에 내보내는 것이다.
이 문제를 해결하는 올바른 방법 var
은 매개 변수에서 제거 하고 지역 var
변수를 도입하는 것 입니다. 루틴의 맨 위에서 매개 변수 값을 해당 변수에 복사하십시오.
답변
함수 시작 부분에 다음 한 줄을 추가하면됩니다.
var language = language
나머지 코드는 다음과 같이 변경되지 않을 수 있습니다.
public func getQuestionList(language: String) -> NSArray {
var language = language
if self.data.count > 0 {
if (language.isEmpty) {
language = "NL"
}
return self.data.objectForKey("questionList" + language) as! NSArray
}
return NSArray()
}
답변
많은 사람들이 inout
매개 변수를 제안하고 있지만 그것이 실제로 그들이 설계된 것이 아닙니다. 게다가 let
상수 나 문자열 리터럴로 함수를 호출 할 수 없습니다 . 함수 서명에 단순히 기본값을 추가하지 않는 이유는 무엇입니까?
public func getQuestionList(language language: String = "NL") -> NSArray {
if data.count > 0 {
return data.objectForKey("questionList" + language) as! NSArray
} else {
return NSArray()
}
}
getQuestionList
기본 언어를 원할 경우 빈 문자열로 호출하지 말고 매개 변수를 생략하십시오.
let list = getQuestionList() // uses the default "NL" language
답변
스위프트 4
public func getQuestionList(language: inout String) -> NSArray {
if self.data.count > 0 {
if (language.isEmpty) {
language = "NL"
}
return self.data.objectForKey("questionList" + language) as! NSArray
}
return NSArray()
}
getQuestionList(language: &someString)
어떤 경우에는 (배열과 관련된 더 복잡한 설정으로) 경험했듯이 메서드 내에서 새 속성을 만들고 해당 속성을 변경하는 것이 항상 작동하지 않을 수 있습니다. 말할 것도없이, inout
매개 변수와 &
인수 에 단순히 추가 하는 대신 메서드를 복잡하게 만드는데, 이것이이 구문이 만들어진 이유입니다.
답변
public func getQuestionList(language: inout String) -> NSArray {
if self.data.count > 0 {
if (language.isEmpty) {
language = "NL"
}
return self.data.objectForKey("questionList" + language) as! NSArray
}
return NSArray()
}
답변
@Harris와 @garanda 답변이 최선의 접근 방식이라고 생각합니다.
어쨌든 귀하의 경우에는 var가 필요하지 않습니다.
public func getQuestionList(language: String) -> NSArray {
if self.data.count > 0 {
return self.data.objectForKey("questionList" + (language.isEmpty ? "NL" : language)) as! NSArray
}
return NSArray()
}