Swift中的genericstypes
在haskell中,你可以这样做:
type Parser a = String -> [(a, String)]
我试图在Swift中做类似的东西。 到目前为止,我没有运气写这些代码。
typealias Parser<A> = String -> [(A, String)] typealias Parser a = String -> [(a, String)] typealias Parser = String -> [(A, String)]
那么,这是不是迅速? 如果是,还有其他的方法来实现这种行为?
更新:似乎genericstypes现在支持在swift 3 https://github.com/apple/swift/blob/master/CHANGELOG.md
typealias
目前不能用于generics。 你最好的select可能是将parsing器函数包装在一个结构中。
struct Parser<A> { let f: String -> [(A, String)] }
然后,您可以在创buildparsing器时使用尾随闭包语法,例如
let parser = Parser<Character> { string in return [head(string), tail(string)] }
从Swift 3.0 typealias
可以使用generics的typealias
。 这应该为你工作:
typealias Parser<A> = (String) -> [(A, String)]
以下是完整的文档: https : //developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/typealias-declaration
在这里,我正在介绍一个用于描述如何在协议定义中使用typealias的typealias示例 :我希望这可以帮助您理解typealias
protocol NumaricType { typealias elementType func plus(lhs : elementType, _ rhs : elementType) -> elementType func minus(lhs : elementType, _ rhs : elementType) -> elementType } struct Arthamatic :NumaricType { func addMethod(element1 :Int, element2 :Int) -> Int { return plus(element1, element2) } func minusMethod(ele1 :Int, ele2 :Int) -> Int { return minus(ele1, ele2) } typealias elementType = Int func plus(lhs: elementType, _ rhs: elementType) -> elementType { return lhs + rhs } func minus(lhs: elementType, _ rhs: elementType) -> elementType { return lhs - rhs } }
输出:
let obj = Arthamatic().addMethod(34, element2: 45) // 79