不带类型的Swift typealias
如果右侧表达式中没有类型,typealias会做什么 在本例中,当BooleanLiteralConverable之外已经存在另一个typealias时,在BooleanLiteralConverable中创建BooleanLiteralType的目的是什么?他们有关系吗不带类型的Swift typealias,swift,type-alias,Swift,Type Alias,如果右侧表达式中没有类型,typealias会做什么 在本例中,当BooleanLiteralConverable之外已经存在另一个typealias时,在BooleanLiteralConverable中创建BooleanLiteralType的目的是什么?他们有关系吗 /// Conforming types can be initialized with the Boolean literals /// `true` and `false`. protocol Bo
/// 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
Swift语言参考中的定义 协议关联类型声明 协议使用关键字typealias声明关联的类型。一 associated type(关联类型)为用作 议定书的声明。关联的类型与类型类似 泛型参数子句中的参数,但它们与 声明它们的协议中的Self。在这种情况下,赛尔夫 指符合协议的最终类型。更多 有关详细信息和示例,请参见关联类型
Swift语言参考中的定义 协议关联类型声明 协议使用关键字typealias声明关联的类型。一 associated type(关联类型)为用作 议定书的声明。关联的类型与类型类似 泛型参数子句中的参数,但它们与 声明它们的协议中的Self。在这种情况下,赛尔夫 指符合协议的最终类型。更多 有关详细信息和示例,请参见关联类型
它为协议声明一个类型成员,您可以在协议方法定义中引用该成员。这允许定义通用协议 比如说
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"
而这不是
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)
}
}
它为协议声明一个类型成员,您可以在协议方法定义中引用该成员。这允许定义通用协议 比如说
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"
而这不是
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)
}
}
谢谢不理解文档。你能解释一下吗?协议类型内的BooleanLiteralType与协议类型外的BooleanLiteralType不同吗?typealias在表达式右侧没有任何内容意味着什么?
BooleanLiteralType
在协议中是符合该协议的类型的占位符。在这种情况下,它必须是BooleanLiteralType。你的意思是,协议内的BooleanLiteralType和协议外的BooleanLiteralType不相关?是的,它们不相关,协议内是一种本地类型变量。谢谢。不理解文档。你能解释一下吗?协议类型内的BooleanLiteralType与协议类型外的BooleanLiteralType不同吗?typealias在表达式右侧没有任何内容意味着什么?BooleanLiteralType
在协议中是符合该协议的类型的占位符。在这种情况下,它必须是一个BooleanLiteralType。你的意思是,协议内部的BooleanLiteralType和协议外部的BooleanLiteralType不相关?是的,它们不相关,协议内部是一种局部类型变量。谢谢-更清楚。Baz类中的echo是否应该使用FooType而不是T?@Boon绝对是的,我的badIs BooleanLiteralType typealias是在协议内部声明的,与在协议外部声明的类型相关?它将为别名提供默认类型,因此如果协议的实现者本身不提供typealias,它将默认为Bool
@vadian说协议中定义的BooleanLiteralType类型别名与协议外部的类型别名无关。你说外面的那个是默认的。哪个是正确的?医生有说明吗?谢谢-更清楚了。Baz类中的echo是否应该使用FooType而不是T?@Boon绝对是的,我的badIs BooleanLiteralType typealias是在协议内部声明的,与在协议外部声明的类型相关?它将为别名提供默认类型,因此如果协议的实现者本身不提供typealias,它将默认为Bool
@vadian说协议中定义的BooleanLiteralType类型别名与协议外部的类型别名无关。你说外面的那个是默认的。哪个是正确的?该文件是否规定了这一点?