ios - 从协议扩展中调用类属性
问题描述
在将协议扩展用于默认实现时,我遇到了一个问题。我定义了一个具有不同可选属性和要使用的功能的协议。在扩展中,我实现了一个默认函数和 nil 属性。在实现中,我使用协议中的属性和函数。
在设备上它按我的预期工作。同样在调试器上,当我在扩展实现中遇到断点时,它给了我类的属性。
有人可以帮我弄清楚为什么我没有从类中获取示例中的属性,而是从扩展中获取 nil 属性。
操场上的例子
import UIKit
protocol Collectable {
var item: String? { get }
func collect()
}
extension Collectable {
var item: String? { return nil }
func collect() {
if let some = item {
print("collect \(some)")
} else {
print("nothing")
}
}
}
class Car: Collectable {
var item = "letter"
}
let car = Car()
car.collect()
解决方案
在协议中,您的 item 是可选字符串,而在您的类中,您声明了另一个名为 item 的变量。您的 collect 函数正在寻找可选项目,并且在您指定它应该返回 nil 的扩展中。
推荐阅读
- node.js - Azure DevOps 不使用 Node.js 提供 Angular 10 + RESTful API,Express 作为压缩文件,它会导致加载速度非常慢
- java - 公钥被篡改后仍然有效
- android - 考虑到进程死亡后碎片回栈的恢复,如何处理应用程序启动时的异步工作
- swift - iOS 中的 Chromecast playTimeDidChange
- blazor-webassembly - 在 Blazor EditForm 上使用自定义提交按钮
- django - 找不到页面 (404) 请求方法:GET 请求 URL:http://127.0.0.1:8000/media/Profile_pics/itachi.jpg
- c++ - 我认为指针只能指向相同的类/数据类型?
- python - 从发布后开始计算分钟数的方法
- pytorch - 在 GPU 上训练模型非常慢
- c# - 如何在c#后台服务中运行多个cron表达式