Swift 2警告:不推荐将2个参数作为单个元组值传递给被调用者

时间:2016-06-02 10:10:46

标签: ios swift

我有这样的代码:

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
    }
}

如何解决此警告?

3 个答案:

答案 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))