如何在Swift中重新分配带有通用类型参数的函数?

新闻网

披露,这是我撰写任何Swift的第一天,我来自JS / TS背景。

我习惯于简单地重新分配功能,如下所示:

let assertEqual = XCTAssertEqual

XCTAssertEqual具有以下声明:

func XCTAssertEqual<T>(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) where T : FloatingPoint

快速操场引发以下错误:

Generic parameter 'T' could not be inferred

我意识到这种分配并不是特别“有价值”,但是将来我可能想用通用类型参数为其他函数添加别名,并且想了解有关Swift特定约定的更多信息。

清扫器

该错误消息非常清楚您在此处需要执行的操作-告诉编译器T应该是什么类型不幸的是,您不能有一个带有unbound的“泛型变量” T

为此,您需要写出函数完整类型名称XCTAssertEquals<T>,对于而言T == Double,它是:

(@autoclosure () throws -> Double, @autoclosure () throws -> Double, Double, @autoclosure () -> String, StaticString, UInt) -> ()

因此,您需要:

let assertEqual: (@autoclosure () throws -> Double, @autoclosure () throws -> Double, Double, @autoclosure () -> String, StaticString, UInt) -> () = XCTAssertEqual

我知道,那是一团糟。因此,如果要对各种Ts执行此操作,则可以首先为长函数名创建类型别名:

typealias XCTAssertEqualsType<T> = (@autoclosure () throws -> T, @autoclosure () throws -> T, T, @autoclosure () -> String, StaticString, UInt) -> ()

然后你可以用XCTAssertEqualsType<Double>XCTAssertEqualsType<Float>等。


但老实说,我不明白为什么要为此断言函数起别名。您会失去很多功能。如果通过变量进行调用,则必须手动输入文件名和行号“ magic”参数。您将丢失所有可选参数,并且正如我在开始时所说的那样,您将丢失泛型。

如果您想要的只是函数的其他名称,则可以自己声明另一个函数:

func anotherName<T>(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) where T : FloatingPoint {
    XCTAssertEqual(try expression1(), try expression2(), accuracy: accuracy, message(), file: file, line: line)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何重新分配函数参数

来自分类Dev

如何重新分配参数?

来自分类Dev

在golang中,如何在函数中重新分配外部引用?

来自分类Dev

在OCaml中,如何在函数内重新分配全局变量

来自分类Dev

具有通用参数类型的Swift函数

来自分类Dev

Swift-如何在函数的参数中传递带有参数的函数?

来自分类Dev

Swift-如何在函数的参数中传递带有参数的函数?

来自分类Dev

如何在DJVU文件中重新分配页码?

来自分类Dev

如何在XSLT中更改或重新分配变量?

来自分类Dev

如何在Vulkan中重新分配缓冲区

来自分类Dev

如何在emberjs组件中重新分配模板?

来自分类Dev

如何在MVC 6中重新分配IWebRequestCreate

来自分类Dev

重新分配参数

来自分类Dev

重新分配到函数中

来自分类Dev

重新分配JavaScript中的函数声明

来自分类Dev

如何在带有参数的函数中调用变量函数?

来自分类Dev

当我在函数中重新分配可变默认参数时会发生什么?

来自分类Dev

C ++:如何在可变参数模板参数上调用带有类型参数的函数?

来自分类Dev

如何将带有设置参数的通用Powershell函数包装到新的指定函数中?

来自分类Dev

重新分配Makefile参数

来自分类Dev

如何在Octave中定义带有参数的函数?

来自分类Dev

如何在Blazor中调用带有参数的函数?

来自分类Dev

如何在python中传递带有参数的函数?

来自分类Dev

为什么重新分配失败并带有临时指针

来自分类Dev

如何在不调用析构函数的情况下使向量重新分配?

来自分类Dev

如何在不使用函数的情况下重新分配范围变量

来自分类Dev

如何在此代码中处理free中的错误并在部分recv()中重新分配

来自分类Dev

如何在Swift中将具有关联类型的协议(通用协议)作为参数传递?

来自分类Dev

在viewDidLoad中带有参数的SWIFT函数

Related 相关文章

  1. 1

    如何重新分配函数参数

  2. 2

    如何重新分配参数?

  3. 3

    在golang中,如何在函数中重新分配外部引用?

  4. 4

    在OCaml中,如何在函数内重新分配全局变量

  5. 5

    具有通用参数类型的Swift函数

  6. 6

    Swift-如何在函数的参数中传递带有参数的函数?

  7. 7

    Swift-如何在函数的参数中传递带有参数的函数?

  8. 8

    如何在DJVU文件中重新分配页码?

  9. 9

    如何在XSLT中更改或重新分配变量?

  10. 10

    如何在Vulkan中重新分配缓冲区

  11. 11

    如何在emberjs组件中重新分配模板?

  12. 12

    如何在MVC 6中重新分配IWebRequestCreate

  13. 13

    重新分配参数

  14. 14

    重新分配到函数中

  15. 15

    重新分配JavaScript中的函数声明

  16. 16

    如何在带有参数的函数中调用变量函数?

  17. 17

    当我在函数中重新分配可变默认参数时会发生什么?

  18. 18

    C ++:如何在可变参数模板参数上调用带有类型参数的函数?

  19. 19

    如何将带有设置参数的通用Powershell函数包装到新的指定函数中?

  20. 20

    重新分配Makefile参数

  21. 21

    如何在Octave中定义带有参数的函数?

  22. 22

    如何在Blazor中调用带有参数的函数?

  23. 23

    如何在python中传递带有参数的函数?

  24. 24

    为什么重新分配失败并带有临时指针

  25. 25

    如何在不调用析构函数的情况下使向量重新分配?

  26. 26

    如何在不使用函数的情况下重新分配范围变量

  27. 27

    如何在此代码中处理free中的错误并在部分recv()中重新分配

  28. 28

    如何在Swift中将具有关联类型的协议(通用协议)作为参数传递?

  29. 29

    在viewDidLoad中带有参数的SWIFT函数

热门标签

归档