arrays - 扩展一个可选的 Equatables 数组?
问题描述
我想编写一个扩展来对符合的可选值数组进行操作Equatable
,例如:
class Bar: Equatable { ... }
let bar1 = Bar()
let bar2 = Bar()
let bars: [Bar?] = [ bar1, bar2, nil ]
bars.foo() <-- this guy
有没有办法用 Swift 做到这一点?我尝试了许多与此类似的变体:
extension Array where Element == Optional<Equatable> {
func foo() { ... }
}
我明白为什么Equatable
不开心,但有办法解决吗?
我发现这个问题非常相似:How to extend protocol Optional, where Wrapped item is Array of Equatable generic elements?但我需要可选元素,而不是可选数组。
解决方案
如评论中所述,您不能这样做:
extension Array where Element == Optional<Equatable>
Array
但是您可以在扩展中创建一个通用函数:
extension Array {
func foo<T: Equatable>() where Element == Optional<T> {
...
}
}
推荐阅读
- java - 更改 JBoss Standalone.xml 后 Spring Boot 应用程序无法启动
- python - Django Admin:将多个管理类注册到同一个模型
- c# - MailMessage.BodyFormat throw an unknown error when it equals to MailFormat.Html
- javascript - Incorrect pathname of current url (without refreshing the page) when navigating through tabs using pagination php wordpress js
- kubernetes - 如何从运行 pod 到本地执行 Kubectl cp,说没有这样的文件或目录
- kubernetes - How to convert YAML to JSON when saving files into container using Kubernetes Configmap
- vb.net - Wcf how to verify the caller identity?
- php - PHP - 单击时如何将数据库中的值传递到另一个页面
- c++ - 我可以在 Qt 中使用 QUdpSockets wo 轮询或自定义类吗?
- javascript - How to fix jquery .is(':focus') not responding