草庐IT

NSCopying

全部标签

ios - 复制空数组有什么意义?

我正在阅读另一个程序员的代码,所以我发现了这个:@property(nonatomic,strong)NSArray*assets;----_assets=[@[]mutableCopy];__blockNSMutableArray*tmpAssets=[@[]mutableCopy];这是某种诡计吗?为什么他对不可变数组assets使用mutableCopy?他为什么不像这样创建它:self.assets=[NSArraynew];__blockNSMutableArray*tmpAssets=[NSMutableArraynew];? 最佳答案

ios - 用于创建可变副本的 Objective-C 模式

我有许多“模型”对象,它们的属性被定义为“只读”并在各种组件之间共享。在某些情况下,我需要创建对象的本地可变副本(将它们用于本地可变状态)我宁愿不实现NSMutableCopy协议(protocol),因为对象在创建后应该是不可变的。修改后的对象可以在复制+变异操作后“传递”。是否有建议的机制,或者我应该只实现一个接收“已更改”参数的构造函数?例如,将JSON解析为native类型的对象:@interfaceImmutableObject:NSObject//various"readonly"properties...-(instancetype)initWithJSON:(NSDic

Swift - 不检查 NSCopying 函数参数

我正在将一些Obj-C代码转换为Swift并遇到了一个问题。这是ObjC代码:-(void)collisionBehavior:(UICollisionBehavior*)behaviorbeganContactForItem:(id)itemwithBoundaryIdentifier:(id)identifieratPoint:(CGPoint)p{NSLog(@"Boundarycontactoccurred-%@",identifier);}这是从UICollisionBehaviorDelegate实现一个协议(protocol)方法,这里是Swift:funccollisi

ios - Swift 3.0 中的 Date.copy()

自从切换到Swift3.0,以及随之而来的NSDate更改为Date,该类不再符合NSCopying协议(protocol)。在Swift2中,这是有效的:letnewDate=oldDate.copy()但现在返回一个编译器错误。在这种情况下,复制Date对象的最佳方法是什么?letnewDate=Date(timeIntervalSince1970:oldDate.timeIntervalSince1970)这样就可以了,但看起来不是特别优雅。并且它可能(理论上)容易受到精度损失的影响,因为TimeInterval是Double(而且我们无法确认Date对象内部使用-或始终使用-D

swift - 使用子类在 Swift 中实现 NSCopying

考虑两个类。第一个是Vehicle,一个符合NSCopying的NSObject子类:classVehicle:NSObject,NSCopying{varwheels=4funccopyWithZone(zone:NSZone)->AnyObject{letvehicle=self.dynamicType()vehicle.wheels=self.wheelsreturnvehicle}}第二个类,Starship,继承自Vehicle:classStarship:Vehicle{varphotonTorpedos=6varantiGravity=trueoverridefuncco

swift - 使用子类在 Swift 中实现 NSCopying

考虑两个类。第一个是Vehicle,一个符合NSCopying的NSObject子类:classVehicle:NSObject,NSCopying{varwheels=4funccopyWithZone(zone:NSZone)->AnyObject{letvehicle=self.dynamicType()vehicle.wheels=self.wheelsreturnvehicle}}第二个类,Starship,继承自Vehicle:classStarship:Vehicle{varphotonTorpedos=6varantiGravity=trueoverridefuncco

ios - 类型 'String' 不符合协议(protocol) 'NSCopying' 向下转换 AnyObject 到 String 时出错

我正在尝试像这样解析JSON格式:{"key_1":{"key_2":"value"}}然后将“值”赋给一个变量。这是我的代码:varvariableShouldBeAssigned:Stringifletx=(jsonResult["key_1"]?as?NSDictionary){iflety=(x["key_2"]?as?String){variableShouldBeAssigned=y}}但是,当我尝试从x["key_2"]?向下转换为字符串时发生错误,但是从jsonResult["key_1"]?向下转换没问题。code>到NSDictionary。我可以通过使用x["ke

swift - Swift 4 中如何遵循 NSCopying 并实现 copyWithZone?

当我尝试使用swift3方式时,我无法遵守NSCopying协议(protocol),我的代码是:publicfunccopy(withzone:NSZone?=nil)->Any{returntype(of:self).init(self)}但是出现错误:无法调用非函数类型“ProductType”的值这里有什么问题? 最佳答案 我刚刚找到了解决方案,将函数更改为:publicfunccopy(withzone:NSZone?=nil)->Any{returnSwift.type(of:self).init(self)}

swift - 参数类型 'Int' 不符合预期类型 'NSCoding & NSCopying & NSObjectProtocol'

我是Swift的新手,正在尝试一些教程来学习和完善我在Swift方面的知识。我在这段代码中偶然发现了我不理解的上述错误。如果你们中的任何人有想法,请在这里解释错误。lettextChoices=[ORKTextChoice(text:"CreateaResearchKitapp",value:0),ORKTextChoice(text:"SeektheHolygrail",value:1),ORKTextChoice(text:"Findashrubbery",value:2)]我通过Xcode提供的建议解决了错误,现在我的代码看起来像lettextChoices=[ORKTextCh

swift - 无法将表达式的类型 'CGRect' 快速转换为 'NSCopying!'

无法将表达式的类型“CGRect”转换为类型“NSCopying!”swift我正在尝试在swift文件中实现键盘通知。//发送UIKeyboardDidShowNotification时调用。funckeyboardWasShown(aNotification:NSNotification){varinfo=aNotification.userInfovarkRect:CGRect=info[UIKeyboardFrameBeginUserInfoKey]asCGRectvarkbSize:CGSize=kRect.size但不确定为什么会出现此错误? 最
12