我有这样的代码:
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
}
}
如何解决此警告?
答案 0 :(得分:5)
此警告在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)
}
}
答案 1 :(得分:4)
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)
答案 2 :(得分:0)
我遇到了这个问题,因为我想要两组不同的默认参数,同时保持我的代码可读。我通过为参数创建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))