【问题标题】:Swift - Xcode 9.4.1 - AnyObject is not a subtype of NSArraySwift - Xcode 9.4.1 - AnyObject 不是 NSArray 的子类型
【发布时间】:2018-08-23 07:05:07
【问题描述】:

两年前以下代码可以正常工作。

Xcode 更新后出现“AnyObject 不是 NSArray 的子类型”错误。谁能帮我修一下?

override func viewWillAppear(_ animated: Bool) {
    if let storednoteItems : AnyObject = UserDefaults.standard.object(forKey: "noteItems") as AnyObject? {
        noteItems = []
        for i in 0 ..< storednoteItems.count += 1 {
            // the above line getting Anyobject is not a subtype of NSArray error
            noteItems.append(storednoteItems[i] as! String)
        }
    }
}

【问题讨论】:

  • 是的,两年前有 swift 2.0 现在是 swift 4

标签: swift xcode swift3 xcode9.4


【解决方案1】:

您根本不应该在 Swift 中将 AnyObjectNSArray 用于值类型。而且你不应该注释编译器可以推断的类型。

UserDefaults 有一个专用的方法array(forKey 来获取一个数组。 您的代码可以简化为

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated) // this line is important. Don't forget to call super.
    if let storednoteItems = UserDefaults.standard.array(forKey: "noteItems") as? [String] {
        noteItems = storednoteItems
    }
}

并声明noteItems

var noteItems = [String]()

如果你指定循环的类型,循环中的任何类型转换都是不必要的。

【讨论】:

    【解决方案2】:

    更新到新版本试试这个..

    if let storednoteItems = UserDefaults.standard.object(forKey: "noteItems") as? [String] {
        var noteItems = [String]()
        for i in 0 ..< storednoteItems.count{
            noteItems.append(storednoteItems[i])
       }
    }
    

    使用foreach 循环非常有效,只需将循环替换为以下循环即可。

    for item in storednoteItems{
        noteItems.append(storednoteItems[i])
    }
    

    【讨论】:

    • 迟来的:是的,就像? [String] & var noteItems = [String]() 解决了我的问题!!
    【解决方案3】:

    您将storednoteItems 输入为AnyObject,但随后您尝试在其上调用count,并尝试对其下标。看起来您真正想要的是 storednoteItems 是一个数组,那么为什么不这样输入呢?而不是as AnyObject?,只需使用as? [String] 键入storednoteItems 作为字符串数组。然后去掉类型上的: AnyObject 声明,你的数组就会像你期望的那样运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多