SDW*_*SDW 116 xcode swift xcode7 swift3
好吧所以我只是将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()
}
Run Code Online (Sandbox Code Playgroud)
Tr0*_*0yJ 98
关于从函数参数中删除Var的讨论已完全记录在GitHub上的这个提交中:删除Var参数
在该文档中,您会发现人们经常将var
参数与inout
参数混淆.甲var
参数仅仅意味着所述参数是所述函数的范围内可变的,同时用inout
参数在返回点的参数值将被复制出功能并进入调用者的上下文.
解决此问题的正确方法是var
从参数中删除并引入局部var
变量.在例程的顶部将参数的值复制到该变量中.
gar*_*nda 81
您是否尝试过分配新的var
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()
}
Run Code Online (Sandbox Code Playgroud)
Har*_*ris 61
只需在函数开头添加这一行:
var language = language
Run Code Online (Sandbox Code Playgroud)
并且其余代码可以保持不变,如下所示:
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()
}
Run Code Online (Sandbox Code Playgroud)
Tim*_*len 13
很多人都在建议一个inout
参数,但这并不是他们的设计目标.此外,它不允许使用let
常量调用函数,也不允许使用字符串文字调用函数.为什么不简单地将默认值添加到函数签名中?
public func getQuestionList(language language: String = "NL") -> NSArray {
if data.count > 0 {
return data.objectForKey("questionList" + language) as! NSArray
} else {
return NSArray()
}
}
Run Code Online (Sandbox Code Playgroud)
getQuestionList
如果您想要默认语言,请确保不使用空字符串调用,但只需省略参数:
let list = getQuestionList() // uses the default "NL" language
Run Code Online (Sandbox Code Playgroud)