gpt4 book ai didi

swift - 为什么 "String?"不符合Equatable

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

我创建了 Observable 类来在 Swift 中实现观察者模式。当一个值从旧值改变时,这会通知订阅者,所以这个泛型类型应该符合 Equatable 协议(protocol)。但是当类型是 String? 时,Xcode raise‖Type 'String?'不符合协议(protocol)“Equatable” 错误。

如果我没记错的话,StringString? 符合 Equatable 协议(protocol)...为什么?

import UIKit

final class Observable<T: Equatable> {
typealias ObserverHandler = ((T) -> Void)
typealias ObserverEntry = (owner: AnyObject, didChange: ObserverHandler)

var value: T {
didSet {
if self.value == oldValue { return }
self.observers.forEach({ (entry: ObserverEntry) in entry.didChange(self.value) })
}
}
private var observers: [ObserverEntry] = []

init(_ value: T) {
self.value = value
}

func subscribe(observer: AnyObject, didChange block: @escaping ObserverHandler) {
let entry: ObserverEntry = (owner: observer, didChange: block)
observers.append(entry)
}

func unsubscribe(observer: AnyObject) {
let filteredEntries: [ObserverEntry] = observers.filter({ (entry: ObserverEntry) -> Bool in
return (entry.owner !== observer)
})
self.observers = filteredEntries
}

}

// [!] Type 'String?' does not conform to protocol 'Equatable'
var foo: Observable<String?> = Observable(nil)

最佳答案

String?Optional<String> 的简写.在 Swift 4.1 之前,没有办法让类型有条件地符合协议(protocol)。例如。 Optional<T>应该是 Equatable只有哪里 TEquatable .

这叫做 conditional conformance , 在 Swift 4.1 中,Optional: Equatable where Self.Wrapped: Equatable .

关于swift - 为什么 "String?"不符合Equatable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48953886/

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