gpt4 book ai didi

swift - NSCopying 副本(带有 :) - Does it really need to return Any?

转载 作者:搜寻专家 更新时间:2023-10-30 22:37:19 25 4
gpt4 key购买 nike

有没有什么方法可以使用 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

我想我可以创建一个接受现有对象的初始化程序,但这在语义上似乎不如“复制”一词好。

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

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

最佳答案

这是 Objective-C API对于 NSObject 方法 copy:

- (id)copy;

转换为 Swift 为:

func copy() -> Any

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

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

关于swift - NSCopying 副本(带有 :) - Does it really need to return Any?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43672150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com