不久前我遇到了奇怪的 Swift 问题。当我尝试在调试中将 Swift 对象转换为 NSObjectProtocol 时,它执行成功。但是当这段代码在 AppStore 构建中执行时,它会转换为 nil。
import Foundation
final class MyClass {
let testP: String = "123"
}
struct MyStruct {
let testP: String = "123"
}
let myClass = MyClass()
let myStruct = MyStruct()
print(myClass) // >> __lldb_expr_1.MyClass
print(myClass as! NSObjectProtocol) // >> __lldb_expr_1.MyClass
print(myStruct as! NSObjectProtocol) // >> __lldb_expr_3.MyStruct(testP: "123")
当我将 struct 转换为 NSObjectProtocol 时,我收到这样的警告:
Cast from 'MyStruct' to unrelated type 'NSObjectProtocol' always fails
但是,您如何看到它成功打印了我的结构。
所以,问题是:这是 Swift 的 bug 还是特性?)
PS:请原谅我的法语????
NSObjectProtocol
有一些方法AnyClass
并且您需要遵守协议的方法。
你可以在 Apple 官方网站上看到什么文档 https://developer.apple.com/documentation/objectivec/nsobjectprotocol#declarations
符合该协议的对象可以被认为是
一流的对象。可以询问这样的对象:
类,以及该类在继承层次结构中的位置。
符合协议。
能够响应特定消息。
See in an image a methods to conform any object with NSObjectProtocol
.
这里还有一些其他对您有用的信息:https://medium.com/a-swift-misadventure/why-swift-protocol-conforming-values-are-treatment-as-value-types-by-default-9482c6809583 https://medium.com/a-swift-misadventure/why-swift-protocol-conforming-values-are-treated-as-value-types-by-default-9482c6809583
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)