swift – NSCopying副本(带:) – 它真的需要返回Any吗?

swift – NSCopying副本(带:) – 它真的需要返回Any吗?,第1张

概述有没有办法使用NSCopying而没有返回的对象是Any类型?它总是迫使我施展.这看起来很奇怪.我正在复制该对象, Swift是否应该根据单词copy的定义知道它是同一类型的? 有没有其他方法可以复制我不知道的对象,或者是否有一些我想要的“陷阱”需要这个. 这堂课很简单,比如: class Person { var name: String var age: Int} 它必须是一个类 有没有办法使用NScopying而没有返回的对象是Any类型?它总是迫使我施展.这看起来很奇怪.我正在复制该对象,Swift是否应该根据单词copy的定义知道它是同一类型的?

有没有其他方法可以复制我不知道的对象,或者是否有一些我想要的“陷阱”需要这个.

这堂课很简单,比如:

class Person {   var name: String   var age: Int}

它必须是一个类,因为我需要继承.

例:

var john = Person(name: "John",age: 30)var johnsClone = john.copy() as! Person

我想我可以创建一个带有现有对象的初始化器,但这似乎在语义上不如“copy”这个词好.

init(person: Person) {     return Person(name: person.name. age: person.age)}

我实现自己的clone()方法的唯一问题是我还希望有一个协议可以在许多这样的对象上调用clone()并隐式返回相同的对象类型.

解决方法 这是NSObject方法副本的 Objective-C API:

- (ID)copy;

这转化为Swift:

func copy() -> Any

因此,没有类型信息附加到新对象;这就是你必须施展的原因.

现在,如果你不喜欢它,那么在你的情况下有一个简单的解决方案:不采用NScopying并且不使用内置的NSObject复制方法!编写一个克隆人的一次性方法 – 例如一个名为makeClone()的实例方法. NSObject副本是一种方便,但没有法律要求你使用它(除非有some other reason为什么Person需要符合NScopying,例如它将被用作NSDictionary的关键,但我打赌你永远不会遇到任何这样的原因).

总结

以上是内存溢出为你收集整理的swift – NSCopying副本(带:) – 它真的需要返回Any吗?全部内容,希望文章能够帮你解决swift – NSCopying副本(带:) – 它真的需要返回Any吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1008069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存