我可以直接使用typealist元组定义函数头吗?

时间:2015-09-27 02:26:27

标签: swift closures tuples

只是为了好玩。

例如,我对用户有不同的操作,我想在不同的功能中故意分开。

  1. 请求友谊
  2. 阻止友谊
  3. 取消好友请求
  4. ...
  5. 所有这些功能(因为我想使它们不同)接收相同的参数

    1. 昵称
    2. a completionBlock
    3. 所以一般来说我会有很多这样的功能:

      1. class func requestFriend(nickName : String, withCompletitionHandler completitionHandler : (status : Bool) -> Void)
      2. class func acceptFriend(nickName : String, withCompletitionHandler completitionHandler : (status : Bool) -> Void)
      3. ...
      4. 现在能做什么真的很棒,会是这样的:

        typealias UserActionTupleParameter = (nickName : String, completitionHandler : (status : Bool) -> Void)
        

        将函数定义为:

        class func acceptFriend => UserActionTupleParameter
        {
        }
        

        并用作:

        acceptFriend(myTupleVariable)
        

        而不是使用def:

        功能
        class func acceptFriend(parametersTuple : UserActionTupleParameter)
        

        只会导致将函数调用为:

        class func acceptFriend((myString, myBlock))
        

        也许我错过了一些东西,或者我搞砸了参数命名,这些命令不允许我在没有元组“()”的情况下传递参数,但是我不能让Xcode 7 Swift 2接受我的意图。

        我特意打算强制使用元组类型定义作为func定义中的func参数。

        因为我知道我可以定义func,如:

        func test (string : String, block : Block)
        

        然后将元组创建为:

        let tuple = (myString, myBlock)
        

        并将该函数调用为:

        test(tuple)
        

        一些想法?

1 个答案:

答案 0 :(得分:1)

这是你在找什么?

typealias UserAction = (nickname: String, completionHandler: Bool -> Void)

func testA(userAction: UserAction) -> Void {
  NSLog("testA called for user \(userAction.nickname)")
  userAction.completionHandler(true)
  NSLog("testA exited")
}

func testB(userAction: UserAction) -> Void {
  NSLog("testB called for user \(userAction.nickname)")
  userAction.completionHandler(false)
  NSLog("testB exited")
}

let myAction = UserAction("Willy") {
  status in NSLog("myAction status is \(status)")
}

以下是我在Playground中的运行方式。 enter image description here