类型为“字符串”的表达式模式不能匹配类型为“ AnyObject”的值

时间:2018-11-02 09:03:47

标签: swift

init?(plistRepresentation : AnyObject){
            switch plistRepresentation{
            case "viewing":
                self = .viewing
    }
}

上面的代码生成“类型为'String'的表达模式不能与类型为'AnyObject'的值匹配”错误。但是当我添加“ as Sttring”的那一刻

init?(plistRepresentation : AnyObject){
                switch plistRepresentation{
                case "viewing" as String:
                    self = .viewing
        }
    }

错误消失了。.谁能向我解释这是如何工作的?这让我有些困惑。

谢谢

1 个答案:

答案 0 :(得分:1)

AnyObject是一种概括类型,包括所有类型的对象类型,例如数组,字典,集合,字符串等。

  

AnyObject 引用类的任何实例,并且等效于Objective-C中的id。当您特别想使用引用类型时,它很有用,因为它不允许使用Swift的任何结构或枚举。

Swift的开关希望特定类型匹配大小写,这就是您放as String时错误消失的原因。

有关AnyObject的更多详细信息,请参见here