gpt4 book ai didi

ios - Swift 值 : and Value == 之间的差异

转载 作者:行者123 更新时间:2023-11-28 08:52:28 28 4
gpt4 key购买 nike

我正在查看一些开源库,如 ReactiveCocoa 和 Alamofire,我注意到 Signal.swift (ReactiveCocoa) 中的语法:

extension SignalType where Value: SignalProducerType, Error == Value.Error

我知道 Value: SignalProducerType 为泛型或关联类型 Value 添加了约束,可以是类约束,也可以是协议(protocol)约束。但是 Value: SignalProducerType 和使用 == 有什么区别呢?

对于以下人为的示例:

protocol Test {
typealias Value
}

extension Test where Value: NSObject, Value == NSError {

}

这和

有什么不同
extension Test where Value: NSObject, Value: NSError {

}

这两个示例都可以编译。

并进一步扩展,您可以使用 Self 做到这一点吗?像这样的东西:

extension Test where Self: SomeClass, Self == NSError

最佳答案

写作

extension Test where Value: NSObject, Value == NSError {

}

您正在使扩展可用于符合 TestValue 等于 NSError 的类型。

另一方面

extension Test where Value: NSObject, Value: NSError {

}

当类符合 Test 且 Value 类型为 NSError 或子类时,扩展可用。

例子

下面的代码编译通过

protocol Test {
typealias Value
}

extension Test where Value: NSObject, Value : NSError {
func foo() { }
}

class MyError: NSError {}

class A: Test {
typealias Value = MyError
}

A().foo()

但是如果我们将扩展条件中的 : 替换成 = 这样

extension Test where Value: NSObject, Value = NSError {
func foo() { print("foo") }
}

代码不再编译。

关于ios - Swift 值 : and Value == 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33849005/

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