我有这样的代码:
func newContent(jsonData: [String:AnyObject]) {
if let userContent: (User, String) = Helper.createUserFromWritingContent(jsonData) {
newContent?(userContent) // here is the warning: Passing 2 arguments to a callee as a single tuple value is deprecated
}
}
我该如何解决这个警告?
此警告在here中指定
Swift 3将弃用发送元组作为参数的选项。试试这个吧
func newAnswerWritingContent(jsonData: [String:AnyObject]) {
if let userContent: (BRSLegacyUser, String) = CometHelper.createBRSAnwerFromWritingContent(jsonData) {
let user = userContent.0
let content = userContent.1
newAnswerWritingContent?(user,content)
}
}
Swift过去常常让你这样做:
func sum(x: Int, y: Int) -> Int {
return x + y
}
let params = (1,1)
sum(params) // <<== This is deprecated
函数sum
有两个参数,但你用一个参数调用它 - 一个带有两个参数的元组。
出于here概述的原因,在Swift 2中不推荐使用此行为。
由于代码中唯一的元组是(User, String)
,这应该可以解决问题:
newContent?(userContent.0, userContent.1)
我刚遇到这个问题因为我想要两组不同的默认参数,同时保持我的代码可读。我通过为我的参数创建一个typealias
来解决它。
typealias exampleParams = (param1: CGFloat, param2: CGFloat)
var exampleDefaultOpen: exampleParams = (param1: 0, param2: 20)
var exampleDefaultClose: exampleParams = (param1: 1, param2: 0)
func example(_ params: exampleParams) {
// do something with params.param1 and params.param2
}
这允许设置为默认值:
example(exampleDefaultOpen)
而且对于这样的自定义参数:
example((param1: 2, param2: 50))