有没有办法在没有返回的对象类型的情况下使用NSCopying Any?它总是迫使我施展.这看起来很奇怪.我正在复制该对象,Swift是否应该根据单词copy的定义知道它是同一类型的?
有没有其他方法可以复制我不知道的对象,或者是否有一些我想要的"陷阱"需要这个.
这堂课很简单,比如:
class Person {
var name: String
var age: Int
}
Run Code Online (Sandbox Code Playgroud)
它必须是一个类,因为我需要继承.
例:
var john = Person(name: "John", age: 30)
var johnsClone = john.copy() as! Person
Run Code Online (Sandbox Code Playgroud)
我想我可以创建一个带有现有对象的初始化器,但这似乎在语义上不如"copy"这个词好.
init(person: Person) {
return Person(name: person.name. age: person.age)
}
Run Code Online (Sandbox Code Playgroud)
我实现自己的clone() 方法的唯一问题是我还希望有一个协议可以调用clone()许多这样的对象并隐式返回相同的对象类型.
这是NSObject方法的Objective-C APIcopy:
- (id)copy;
Run Code Online (Sandbox Code Playgroud)
这转化为Swift:
func copy() -> Any
Run Code Online (Sandbox Code Playgroud)
因此,没有类型信息附加到新对象; 这就是你必须施展的原因.
现在,如果你不喜欢它,那么在你的情况下有一个简单的解决方案:不采用NSCopying并且不使用内置的NSObject copy方法!写你自己是一个克隆人一次性的方法-例如所谓的实例方法makeClone().NSObject copy是一种方便,但没有法律要求你使用它(除非有其他理由为什么Person需要符合NSCopying,例如它被用作NSDictionary的关键,但我打赌你永远不会遇到任何这样的原因).
| 归档时间: |
|
| 查看次数: |
1778 次 |
| 最近记录: |