当前位置: 首页 > 面试题库 >

Swift中的通用typealias

陶朝明
2023-03-14
问题内容

在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)]

那么,这根本不可能很快吗?如果还有其他方法可以实现此行为?

更新: 似乎Swift 3现在支持通用类型别名
https://github.com/apple/swift/blob/master/CHANGELOG.md


问题答案:

typealias从Swift 3.0开始可以使用泛型。这应该为您工作:

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

用法(来自@Calin Drule评论):

func parse<A>(stringToParse: String, parser: Parser)


 类似资料:
  • 问题内容: 假设我有一个通用类: 这些声明之间有什么区别? 问题答案: 没有泛型参数就不能存在泛型类型,因此省略泛型类型意味着您希望编译器推断该类型。 在这种情况下,要推断的逻辑类型为。 请注意,这仅适用于您使用了内部声明。它不适用于其他泛型类。 可以在变量声明中使用类似的通用参数推断:

  • 问题内容: 我正在尝试创建一个字典变量,其值是两种类型之一。我的尝试的一个例子应该使这一点更清楚: 这引发了仅语法功能类型可以通用的编译器错误。我想知道是否有可能,我只是不知道正确的语法? 问题答案: 为此所需的工具是带有关联数据的枚举。 这样可以捕获“一个浮标或布尔对象”,并提供更好的文档记录和类型安全性。 要卸载数据,请使用switch语句: 使用switch语句可确保覆盖所有可能的类型,并防

  • 假设我在Swift中定义了一个泛型类,类似于以下内容: (我知道数组有一个稍微好一点的实现,这只是一个例子。) 在Swift中,我现在可以非常容易地使用这个类: 在Xcode 7中,我们现在在Objective-C中拥有泛型,所以我假设我可以在Objective-C中使用这个类: 然而,MyArray从未添加到我的<code>项目Swift中。h文件。即使我将其更改为从NSObject继承,它仍然

  • 问题内容: 该文件说 注意 Swift类不能从通用基类继承。您定义而未指定超类的类将自动成为您要构建的基类。” 摘录自:Apple Inc.“ Swift编程语言。” iBooks。 这对我来说没有多大意义。Objective- C具有通用基类是有原因的,并且同样的原因也适用于Swift,是吗?管理着保留/释放语义,对默认的实现,和。所有这些功能在Swift中也可用。 (Objective-C和S

  • 问题内容: 我试图从DetailViewController类调用在ViewController类中声明的函数。 尝试调试“通话中的额外参数”时,会弹出错误消息。 在ViewController类中: 在详细信息ViewController类 这很简单,但我感到困惑。 问题答案: 在某些情况下,即使参数调用的类型与函数声明的类型不匹配,即使调用看起来正确,也会给出“调用中的附加参数”。从您的问题来

  • 问题内容: 有什么办法可以使以下在Swift 3中正常工作? 该功能应该采取型的封闭,运行它传递到它,然后简单地返回。 另一个选择是为此使用运算符,例如“ ”(从Kotlin和Xtend语言中借用了这个想法)。 试图做这样的扩展: 但是它需要在闭包中显式声明参数类型: 这不方便,并且使整个想法不值得付出努力。类型已经在对象创建时指定,并且应该有可能不明确地重复它。 谢谢! 问题答案: HasApp