当前位置: 首页 > 面试题库 >

在Swift中下标的含糊使用

蒋健
2023-03-14
问题内容

在我的Swift代码中,我不断收到“模棱两可地使用下标”的错误。我不知道是什么原因导致此错误。它只是随机弹出。这是我的代码:

if let path = NSBundle.mainBundle().pathForResource("MusicQuestions", ofType: "plist") {
    myQuestionsArray = NSArray(contentsOfFile: path)
}

var count:Int = 1
let currentQuestionDict = myQuestionsArray!.objectAtIndex(count)

if let button1Title = currentQuestionDict["choice1"] as? String {
    button1.setTitle("\(button1Title)", forState: UIControlState.Normal)
}

if let button2Title = currentQuestionDict["choice2"] as? String {
    button2.setTitle("\(button2Title)", forState: UIControlState.Normal)
}

if let button3Title = currentQuestionDict["choice3"] as? String {
    button3.setTitle("\(button3Title)", forState: UIControlState.Normal)
}
if let button4Title = currentQuestionDict["choice4"] as? String {
    button4.setTitle("\(button4Title)", forState: UIControlState.Normal)
}

if let question = currentQuestionDict["question"] as? String!{
    questionLabel.text = "\(question)"
}

问题答案:

问题是您正在使用NSArray:

myQuestionsArray = NSArray(contentsOfFile: path)

这意味着这myQuestionArray是一个NSArray。但是NSArray没有有关其元素的类型信息。因此,当您到达这一行时:

let currentQuestionDict = myQuestionsArray!.objectAtIndex(count)


Swift没有类型信息,必须创建currentQuestionDict一个AnyObject。但是您不能对AnyObject下标,因此类似的表达式currentQuestionDict["choice1"]无法编译。

解决方案是使用Swift类型。如果您知道currentQuestionDict真正的含义,请键入该类型。至少,由于您似乎相信这是一本字典,因此请使其成为一本字典。键入为[NSObject:AnyObject](如果可能,则更具体)。您可以通过多种方式进行操作;一种方法是在创建变量时进行强制转换:

let currentQuestionDict = 
    myQuestionsArray!.objectAtIndex(count) as! [NSObject:AnyObject]

简而言之,如果可以避免使用NSArray和NSDictionary,则不要使用(通常可以避免使用)。如果您从Objective-
C收到一个,请输入它的真实名称,以便Swift可以使用它。



 类似资料:
  • 问题内容: 对于此Firebase数据提取,我在以下代码中错误地使用了下标,但是我无法弄清楚自己在做什么错。我在一行中使用下标模棱两可的错误。 我尝试应用从这篇文章中学到的知识,但是我无法弄清楚我所缺少的内容,因为我想让编译器知道“ as?[String:AnyObject]”是什么类型的字典。 任何想法或想法将不胜感激! 问题答案: 我处理数据的首选方式是尽可能早地拆开数据。

  • 在下标的帮助下,可以访问类,结构和枚举中的集合,序列和列表的元素成员。 这些下标用于在索引的帮助下存储和检索值。 使用来访问数组元素,并在字典实例中的后续成员元素可以使用来访问。 对于单个类型,下标可以是单个声明到多个声明。 可以使用适当的下标来重载传递给下标的索引值的类型。 根据用户对其输入数据类型声明的要求,下标的范围也从一维到多维。 下标声明语法及其用法 回顾一下计算属性。 下标也遵循与计算

  • 下标脚本 可以定义在类(Class)、结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问对象、集合或序列的快捷方式,不需要再调用实例的特定的赋值和访问方法。 举例来说,用下标脚本访问一个数组(Array)实例中的元素可以这样写 someArray[index] ,访问字典(Dictionary)实例中的元素可以这样写 someDictionary[key]。 对

  • 模糊可以柔化整个或部分图像中的细节。 左侧的原始图像未经过模糊处理。而对于右侧的图像来说,飞机后面的区域经过了模糊处理。

  • 问题内容: 我正在尝试编写一个简单的Array扩展,该扩展提供了“ distinct”方法。这是我到目前为止的内容: 问题是“包含”语句失败,如下所示: 找不到包含所提供参数的“包含”的重载 我很确定类型约束是正确的。有任何想法吗? 问题答案: 斯威夫特1.x 元素中的元素不必是,即它们不必与。 这意味着您不能为 所有 可能的数组编写该函数。而且Swift不允许您仅扩展Arrays的子集。 这意味

  • 了解如何在 Adobe XD 中巧妙地向对象中添加模糊蒙版,或者对整个对象进行模糊处理。 如何添加背景模糊效果? 通过以下方法,您可以向对象或者画板上的图像添加背景模糊效果,以便强调或不再强调对象的某些部分: 创建一个模糊蒙版,用于模糊下方的任何可见内容 向选定对象添加背景模糊效果,对整个对象进行模糊处理 当您向对象添加背景模糊效果时,这些更改是非破坏性的,您可以恢复已执行模糊处理的原始对象或图像