gpt4 book ai didi

没有类型的 Swift typealias

转载 作者:搜寻专家 更新时间:2023-11-01 06:08:22 27 4
gpt4 key购买 nike

没有正确表达式类型的类型别名有什么作用?

在示例中,当另一个类型别名已存在于 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com