Cos*_*ows 0 generics xcode function ios swift
在通过按 command+click 研究 XCTAssert 方法时,看起来它们的底层方法是一个具有类型的函数(称为 T 的通用类型,符合 Equatable 协议)。我说得对吗?如果是的话,函数如何遵守协议?函数是类型吗?
public func XCTAssertEqual<T : Equatable>(_ expression1: @autoclosure () throws -> ArraySlice<T>, _ expression2: @autoclosure () throws -> ArraySlice<T>, _ message: @autoclosure () -> String = default, file: StaticString = #file, line: UInt = #line)
Run Code Online (Sandbox Code Playgroud)
这行是最令人困惑的,我在上面试图解释:
func XCTAssertEqual<T : Equatable>`
Run Code Online (Sandbox Code Playgroud)
每个函数都有一个特定的函数类型,由函数的参数类型和返回类型组成。
\n\ntypealias FooType = (Int, String)->String\n\nfunc foo(i: Int, s: String)->String {\n return s + "_\\(i)"\n}\n\nfunc bar(foo0: FooType)->String {\n return foo0(100, "alpha")\n}\n\nprint(bar(foo)) // alpha_100\n\nlet f:FooType = { i, s in\n return s + "_\\(i)"\n}\n\nprint(f(200, "beta")) // beta_200\nRun Code Online (Sandbox Code Playgroud)\n\n附录,特别是布兰登的:-)
\n\nlet farr:[()->Int] = [{return 1}, {return 2}, {return 3}]\nfor f in farr {\n print(f())\n/*\n 1\n 2\n 3\n*/\n}\nRun Code Online (Sandbox Code Playgroud)\n\n附录 2,布兰登
\n\nfunc f1()->Int {\n return 1\n}\nfunc f2()->Int {\n return 2\n}\n\nlet farr2:[()->Int] = [f1, f2]\nfor f in farr2 {\n print(f())\n/*\n 1\n 2\n */\n}\nRun Code Online (Sandbox Code Playgroud)\n\n应用程序 3 :-)
\n\nlet farr2 = [f1, f2]\nfor f in farr2 {\n print(f())\n/*\n 1\n 2\n */\n}\nRun Code Online (Sandbox Code Playgroud)\n\n来自苹果文档
\n\n\n\nSwift 中的每个函数都有一个类型,由 function\xe2\x80\x99s\n 参数类型和返回类型组成。您可以像 Swift 中的任何其他类型一样使用此类型,这样可以轻松地将函数作为参数传递给其他函数,以及从函数返回函数。函数也可以编写在其他函数中,以将有用的功能封装在嵌套函数作用域内。
\n