我在AppDelegate中,尝试传递对WatchKit扩展请求的答复。我不能使用枚举数组作为其值键入为AnyObject的Dictionary中的值。在操场上进行实验显示:
enum E : Int {
case a = 0
case b
}
var x : AnyObject = [0, 1] // OK
var y : AnyObject = [E.a, E.b] // [E] is not convertible to AnyObject
当然,可以通过将枚举转换为字符串或数字来解决此问题,但是为什么这在Swift中是类型错误?
AnyObject
为了与Objective-C兼容而存在。您只能将对象放入[AnyObject]
Objective-
C可以解释的数组中。Swift枚举与Objective-C不兼容,因此您必须将它们转换为。
var x: AnyObject = [0, 1]
之所以起作用,是因为Swift会自动处理Object-
C可以处理Int
的类型转换NSNumber
。不幸的是,Swift枚举没有这种自动转换,因此您需要做以下事情:
var y: AnyObject = [E.a.rawValue, E.b.rawValue]
假设您的枚举具有Objective-C可以处理的基础类型,例如String
或Int
。
无效的另一个示例是可选的。
var a: Int? = 17
var b: AnyObject = [a] // '[Int?]' is not convertible to 'AnyObject'
有关更多信息,请参见使用可可数据类型。
问题内容: 编译错误如下: 类型“ AnyObject”不符合协议“ SequenceType” 这种压力是什么? 谁能帮我很多忙! 问题答案: 苹果在Swift编程语言中指出: for-in循环针对范围,序列,集合或进度中的每个项目执行一组语句。 目前,它仅符合protocol ,因此您无法在其上使用for循环。如果要这样做,则必须执行类似以下操作:
问题内容: 为什么我要有一个数组并在其中放入一堆不同大小的类型… …除了和.... 文档说明: “ AnyObject可以代表任何类类型的实例” 但是,当我命令点击,或者看到这些类型的标准库定义,我看到他们都值。 这里的根本问题是什么?为什么这样设计? 问题答案: Swift中有两种类型的东西- 可以真正容纳任何东西-结构,枚举或类,以及只能容纳类。 有时似乎可以保留结构的原因是,某些特定类型会根
问题内容: 我试图在我快速编写的类上使用NSCoding协议,但是似乎无法弄清楚为什么当我实现所需的方法时,编译器会抱怨它“不符合协议NSCoding”: 这是一个错误还是我只是缺少一些东西? 问题答案: 如您在报告导航器中详细的编译器消息中所见,您的方法未正确声明: (在beta版本之间可能有所变化。)此外,该方法必须标记为: 在 Swift 3中 ,所需的方法是
问题内容: 我正在使用Swift 2,并使用WeakContainer作为存储一组弱对象的方法,就像 然后在我的ViewController中,声明 但这是错误的 不支持将MyDelegate用作符合协议AnyObject的具体类型 我看到错误是成员已声明为,因此应该是对象。但是我也声明为。如何解决这个问题? 问题答案: 我有相同的想法,用泛型创建弱容器。 结果,我为创建了包装器,并为您的编译器错
问题内容: 我有一个雨燕库,是严重依赖从。 迁移到Swift 4之后,我发现这些调用总是会崩溃,并显示错误“该类不符合键的键值编码…”,除非使用声明了我要查找的属性。 现在是否必须声明要使用此方法找到的属性?还有其他选择吗? 问题答案: 当您执行迁移时,Xcode询问了推断,您可能选择了新类型而不是Swift3。 可能的解决方案: 根据需要在每个方法上使用而不是整个类。 用 您可以在课堂上使用。
我有一个Int,作为AnyObject保存在Parse中。当我检索AnyObject时?尝试将其转换为字符串、NSString、NSNumber或其他任何形式,我不断得到一个EXC_断点,因为转换返回Nil,并且出现“Swift dynamic cast failed”错误。 我试图创建这个简单的测试来找出哪个部分失败了,但疯狂的是,这个测试将通过似乎所有步骤都相同的地方: 以下是我的逻辑中的相关