- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
没有正确表达式类型的类型别名有什么作用?
在示例中,当另一个类型别名已存在于 BooleanLiteralConvertible 之外时,在 BooleanLiteralConvertible 中创建 BooleanLiteralType 的目的是什么?它们有关系吗?
/// Conforming types can be initialized with the Boolean literals
/// `true` and `false`.
protocol BooleanLiteralConvertible {
typealias BooleanLiteralType
/// Create an instance initialized to `value`.
init(booleanLiteral value: Self.BooleanLiteralType)
}
/// The default type for an otherwise-unconstrained Boolean literal.
typealias BooleanLiteralType = Bool
最佳答案
它为协议(protocol)声明了一个类型成员,您可以在协议(protocol)方法定义中引用它。这允许定义通用协议(protocol)。
例如
protocol Foo {
typealias FooType
func echo(x: FooType)
}
class Baz<T: Comparable>: Foo {
typealias FooType = T
func echo(x: FooType) {
println(x)
}
}
Baz().echo(2) // "2"
Baz().echo("hi") "hi"
函数echo
是完全通用的,因为 FooType 是任何类型。实现 Foo
的类然后协议(protocol)可以细化并指定 FooType
相应地。
在示例中,我们使用了另一种泛型类型 ( T
),因此 FooType
没有精炼到只有Comparable
类型。
关于默认类型别名,这会编译
protocol Foo {
typealias FooType
func echo(x: FooType)
}
typealias FooType = Bool
class Bar: Foo {
func echo(x: FooType) { // no local definition for `FooType`, default to `Bool`
println(x)
}
}
虽然这不是
protocol Foo {
typealias FooType
func echo(x: FooType)
}
class Bar: Foo {
func echo(x: FooType) { // `FooType` can't be resolved as a valid type
println(x)
}
}
关于没有类型的 Swift typealias,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31437432/
没有正确表达式类型的类型别名有什么作用? 在示例中,当另一个类型别名已存在于 BooleanLiteralConvertible 之外时,在 BooleanLiteralConvertible 中创建
作为一项学习练习,我正在尝试编写一个小型函数库。我的库中的许多函数都需要传入函数。我想为该函数“键入别名”,以便我的库的用户必须传入具有特定签名的函数。 我已经试过了: typealias Callb
我想使用 Class1 类中定义的别名。我想将它用于 Class2 import UIKit class Class1: NSObject { typealias tp = () -> Voi
我已经看到这个技巧来实现(比方说)图像类 UIImage/NSImage 的平台无关接口(interface): #if os(iOS) import UIKit typealias
我是 C# 的新手,习惯了 Swift,所以请多多包涵。 我想完全按照以下 Swift 代码描述的方式在 C# 中使用类型: typealias Answer = (title: String, is
在下面的代码中,当我直接引用 C.ID 而不是使用 ID 类型别名时,我得到一个错误,“type of expression is ambiguous without more语境”。如果它们都引用相
我真的只是加入这个社区来寻求解决一个特定问题的帮助,特别是关于如何声明一个以特定顺序保存各种信息类型的类型。对于上下文,我有下面使用的代码示例。 typealias Template = [Strin
嘿,我有一个使用类型别名的代码,这样当用户没有正确注册时,它能够向用户发送错误代码,尽管我的类型别名不起作用,这给我带来了我的类(class)突然出现的问题当我使用类型别名时成为错误类型,有人可以告诉
所以我写了一个与闭包有关的小练习程序。我试图更好地理解异步概念是如何工作的。当我尝试调用 request() 时,出现如下所示的转换错误: import UIKit let correctPassco
好吧,我已经完成了作业并阅读了我能找到的内容,但我似乎无法找到是否可以使用 Swift 来完成。我有一个到处都在使用的枚举:SomeEnum 如果它是 case 则它是一个冗长的 SomeEnum.S
根据Kotlin's lexer的出处, 有一个 typealias 关键字,它不像 yield 和 typeof 那样“保留供将来使用”。 另外,grammar reference建议 typeal
julia> typealias ERROR: UndefVarError: typealias not defined 它在 Julia:0.5 中有效,但在以上版本中无效 help?> typea
为什么编译失败?我试图减少重复的次数,因为在实际代码中类名很大,type 实际上是一个很长的名字 https://godbolt.org/z/8YarWs #include template str
我已经使用Kotlin的typealias定义了E164电话号码类型: typealias E164 = String 这使我在代码中传递电话号码时的意图更加清晰,而不仅仅是传递字符串。我认识到并没有
我的应用程序使用一个由 NSKeyArchiver 创建的文件,它引用了一个包含在外部框架中的对象。应用程序 Xcode 项目中不再提供外部框架。因此,当我尝试加载存档文件时,应用程序会在尝试解析此对
我有一个根对象,它主要由一个元组数组和一堆状态枚举组成。元组是这样描述的: typealias Program = [(Number, Statement)] 根对象目前是 NSCoding,但我想添
我有一个方法: public func someMethod(controller: Controller) { print(controller) typealias Handler
我有一个变量,它必须是 UIView,它也实现了 MTMathKeyboard 协议(protocol)。 我试过了, var keyboard: (UIView & MTMathKeyboard)
我正在处理一个多模块项目,该项目不再编译。设置是一些模块在另一个 git repo(repo“A”)中并将模块的 AAR 输出发布到 maven。然后另一个 git repo (repo "B") 通
我对 Kotlin 中的协议(protocol)组合有点生疏,我只想通过声明自定义 typealias 来组合多个接口(interface): // This doesn't work typeali
我是一名优秀的程序员,十分优秀!