【问题标题】:Ambiguous use of ‘subscript’ error when importing AVFoundation导入 AVFoundation 时使用“下标”错误
【发布时间】:2016-05-02 02:05:59
【问题描述】:

使用 Xcode 7.2 和 Swift 2.1.1

我正在从 .plist 文件中检索数据 该文件包含一系列测验的数据。要检索的测验数据包括 12 个问题的数组和对应的 12 个多项选择选项(每个 4 名成员)的数组。

var quizId = “”
var questions:[String] = []
var answers:[[String]] = []

测验 id 是从前一个视图控制器的 segue 中传递的。然后在 ViewDidLoad 中检索数据。

let path = NSBundle.mainBundle().pathForResource(“quiz id”, ofType: "plist")
let dict = NSDictionary(contentsOfFile: path!)
questions = dict!.objectForKey(“Questions”)![0] as! [String]
answers = dict!.objectForKey(“Answers”)![1] as! [[String]]

在我尝试导入 AVFoundation 之前,代码运行良好,最后两行抛出了“下标”的模糊使用错误。

【问题讨论】:

    标签: xcode swift subscript


    【解决方案1】:

    这是因为导入 AVFoundation 会带来新的下标定义(即 AUAudioUnitBusArray,谢谢 Martin R.),它会混淆不知道 dict!.objectForKey(“Questions”) 的类型的编译器(导入后确实推断为 AnyObject , 而不是 NSArray)。

    解决方法是帮助编译器安全地了解类型,例如通过使用可选绑定进行向下转换:

    if let questions = dict?.objectForKey("Questions") as? NSArray {
        print(questions[0])
    }
    

    甚至更好:

    if let questions = dict?.objectForKey("Questions") as? [String] {
        print(questions[0])
    }
    

    【讨论】:

    • 从报告导航器中的编译器输出可以看到NSArrayAUAudioUnitBusArray 都有一个下标方法...
    • 向下转换为 NSArray 或 [String] 会产生警告:“从 AUAudioUnitBus 转换为不相关的类型 NSArray 总是失败。”,并且未创建数组。但是向下转换为 AnyObject 有效:) 所以回答接受并感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2020-11-19
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多