如何克隆 class 实例并仅更改 Objective C 或 Swift 中的一个字段?

How to clone a class instance and change just one field in Objective C or Swift?

Scala 提供了一种在复制不可变对象时仅更改一个 属性 的方法。 Objective C 或 Swift 是否具有等效功能,或者是否有任何库添加了类似的功能?

注意:此问题仅涉及引用单个 属性 而不是更新对象数组。

没有内置任何内容,但是编写一个执行此操作的方法很容易,使用 KVC 设置值:

@implementation NSObject (WSSCopyMutating)

- (instancetype)WSSCopyChangingValue:(id)val forKey:(NSString *)key
{
    id newObj = [self copy];
    [newObj setValue:val forKey:key];

    return newObj;
}

@end

这要求您复制的 class 符合 NSCopyingsetValue:forKey: 将找到您命名的字段,而不考虑其 public 可见性或可写性。