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

问题描述 投票:0回答:3

我有这样的代码:

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

我该如何解决这个警告?

ios swift
3个回答
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)
   }
}

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)

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))
© www.soinside.com 2019 - 2024. All rights reserved.