当我在第一次解析JSON数据时遇到这两个类型别名时,我不知道如何正确区分或实现它们。 那是什么 Any和AnyObject是Swift中的两个特殊类型,用于处理非特定类型。 根据Apple的Swift文档, Any 可以代表任何类型的实例,包括函数类型和可选类型。 AnyObject 可以代表任何类类型的实例。 好的,很简单-所有类型都使用Any ,Class类使用AnyObject ,对吗? 为了了解它们在代码中的实际行为,我决定在Playground中与它们一起玩。 任何人都允许我使用不同类型的混合函数,包括函数和非类类型,例如Int,String和Bool。 根据文档,此数组中的元素是作为值类型的Structs,因此从理论上讲, AnyObjec t在这些情况下不起作用。 为了验证这一点,我尝试使用AnyObject包括String和Ints,这是Swift中的值类型。 不出所料,编译器向我抛出一个错误,指出元素与数组中的AnyObject类型不符 。 知道了! 然后,当我尝试遵循编译器的建议时,发生了一件奇怪的事情: 刚刚发生了什么?! 如何通过将每个元素显式转换为AnyObject来在整数和字符串上使用AnyObject ? 然后,我将anyObjectArray打印到控制台中。 在我看来, Hi元素显然看起来像是一个字符串,但是在Swift中却没有像普通的String值一样引号! 接下来,我使用for-in循环打印每个元素,以检查其实际类型,而不是AnyObject的强制类型。 首先,我使用了is运算符来查看元素是否为Swift Struct类型。 它是String类型的! 那么如何将其转换为AnyObject呢? 同样,Swift中的字符串是结构,而不是类类型。 因此,从理论上讲,我不应该将它们转换为AnyObject 。 我完全感到困惑,决定对它做更多的实验。 这次,我使用了Objective-C类型的NSNumber和NSString来检查每个元素的类型。 等等, 嗨也是NSString,数字元素是NSNumber! 而且……它们是Objective-C中的引用类型! 这是为什么Hi在控制台上没有引号的原因吗? 我写了一些下面的代码,看我的假设是否正确。 🔎 已确认! 现在, 转换为数组中AnyObject的元素是Objective-C的类类型:NSString和NSNumber。 那么……幕后到底发生了什么? 我继续深入研究该主题,并从文档“ 将Swift与Cocoa和Objective-C(Swift 3.0.1)”中找到了最合理的答案。 作为与Objective-C互操作性的一部分,Swift提供了使用Cocoa框架的便捷高效的方法。 Swift会自动将某些Objective-C类型转换为Swift类型,并将某些Swift类型转换为Objective-C类型。 可以在Objective-C和Swift之间转换的 类型 称为 […]
我试图学习如何使用UserDefaults,并不知道如何存储我需要存储的值之一。 我有这个枚举: enum CalculationFormula: Int { case Epley case Brzychi case Lander case Lombardi case MayhewEtAl case OConnerEtAl } 和这个类与一个名为'selectedFormula',我想能够存储为一个NSUserDefaults值的属性: class CalculatorBrain: NSObject { var weightLifted: Double var repetitions: Double var oneRepMax: Double? var selectedFormula = CalculationFormula.Epley init(weightLifted: Double, repetitions: Double) { self.weightLifted = weightLifted self.repetitions = repetitions let userDefaults = NSUserDefaults.standardUserDefaults() self.selectedFormula = userDefaults.objectForKey("selectedFormula") […]
你好,StackOverflow 🙂 自升级到swift 2.0以来,我一直在遇到一个奇怪的问题 我试图设置边框颜色,所以我正在写self.layer.borderColor = borderColor as! CGColor self.layer.borderColor = borderColor as! CGColor其中borderColor是一个AnyObject ,而self.layer.borderColor是一个CGColor? 如果我写self.layer.borderColor = borderColor as! CGColor self.layer.borderColor = borderColor as! CGColor我得到警告 处理强制downcast到“CGColor”作为可选将永远不会产生“零” 并build议改为使用as? 如果我改写self.layer.borderColor = borderColor as? CGColor self.layer.borderColor = borderColor as? CGColor我得到错误 对CoreFoundationtypes“CGColor”的条件降级将始终成功 只是为了确保我没有丢失的东西,我也试着写container.layer.borderColor = borderColor as CGColor和container.layer.borderColor = borderColor这两个都给了以下错误: “AnyObject”不能转换为“CGColor”; 你的意思是使用“as!” 强迫低调? 只要运行时使用XCode给出的警告as! 并不是那么糟糕,但我宁愿保持我的代码警告免费。 为了确保我真的需要你的帮助 这是我不理解,或者它只是Swift 2.0中的一个错误,我应该报告。 干杯! 雅各
我在'Dictionary'上创build了一个扩展来帮助我parsingJSON。 下面的方法可以帮助我做到这一点: func toJSONString() -> String? { if let dict = self as? AnyObject { if let data = try? JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions(rawValue: 0)) { if let json = String(data: data, encoding: String.Encoding.utf8) { return json } } } return nil } 这一问题发生在这一行上: if let dict = self as? AnyObject { 我得到一个警告,说“检查optionals中使用的非可选types的AnyObject” 我该如何解决这个问题?
我正在使用SWIFT 3构build一种聊天信使types。 要存储loggedIn用户,我尝试使用AnyObjecttypes的onject。 var loggedInUser = AnyObject?() 它会给出以下错误:ViewController.swift:29:24:无法调用types为“AnyObject?”的初始值设定项? 没有任何争论
我想sortinganyobject的数组,但无法做到这一点。我从Parse数据库以AnyObject格式获取一些数据。 根据以下数据,我想按“名称”sorting此AnyObject数组。 以下是我的代码 – let sortedArray = (myArray as! [AnyObject]).sorted(by: { (dictOne, dictTwo) -> Bool in let d1 = dictOne["NAME"]! as AnyObject; // this line gives error "Ambiguous use of subscript" let d2 = dictTwo["NAME"]! as AnyObject; // this line gives error "Ambiguous use of subscript" return d1 < d2 }) myArray看起来像这样 – { LINK […]