【问题标题】:Can I define a function header directly with a typealist tuple?我可以直接用 typealist tuple 定义函数头吗?
【发布时间】:2015-09-27 02:26:27
【问题描述】:

只是为了好玩。

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

  1. 请求友谊
  2. 阻止友谊
  3. 取消好友请求
  4. ...

所有这些函数(因为我想让它们不同)接收相同的参数

  1. 昵称
  2. 完成块

所以总的来说我会有很多这样的功能:

  1. class func requestFriend(nickName : String, withCompletitionHandler completitionHandler : (status : Bool) -> Void)
  2. class func acceptFriend(nickName : String, withCompletitionHandler completitionHandler : (status : Bool) -> Void)
  3. ...

现在能够做的真正好的事情是:

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 test (string : String, block : Block)

然后将元组创建为:

let tuple = (myString, myBlock)

并将函数调用为:

test(tuple)

一些想法?

【问题讨论】:

    标签: swift closures tuples


    【解决方案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 中的运行方式。

    【讨论】:

    • 是的)似乎你做到了)仍然不明白我是不是“不做”它。猜猜我的块定义并不真正适合元组作为参数接收的方式。糟糕的是,我至少无法获得闭包的自动完成功能)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多