Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不带类型的Swift typealias_Swift_Type Alias - Fatal编程技术网

不带类型的Swift typealias

不带类型的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

如果右侧表达式中没有类型,typealias会做什么

在本例中,当BooleanLiteralConverable之外已经存在另一个typealias时,在BooleanLiteralConverable中创建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

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类型别名与协议外部的类型别名无关。你说外面的那个是默认的。哪个是正确的?该文件是否规定了这一点?