如何克隆 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 符合 NSCopying
。 setValue:forKey:
将找到您命名的字段,而不考虑其 public 可见性或可写性。
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 符合 NSCopying
。 setValue:forKey:
将找到您命名的字段,而不考虑其 public 可见性或可写性。