Mehrdeutige Verwendung von Tiefgestelltem in Swift
Ich immer eine Fehlermeldung "mehrdeutige Verwendung Tiefgestellt" in meine Swift-code. Ich weiß nicht, was diesen Fehler verursacht. Es nur zufällig aufgetaucht. Hier ist mein code:
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)"
}
Kommentar zu dem Problem
Weißt du, was ist Tiefgestellt? Wenn nicht, oben ist eine Verknüpfung zum Zugriff auf ein element einer Auflistung. Werfen Sie einen Blick auf dieser By the way, könnten Sie die post-Typ
currentQuestionDict
um den Kontext zu verstehen. Die geben? Es ist im Grunde nur ein NSDictionary mit Zeichenfolgen gefüllt.
Nicht sagen, was es ist "im Grunde". Jeder Swift-variable hat eine Erklärung gibt es einen bestimmten Typ. Zeigen die Deklaration von
currentQuestionDict
. Die gesamte Antwort auf deine Frage hängt davon ab, die Erklärung. Zu verstecken, ist es albern: es die Antwort. Zeigen es. Nicht
lassen currentQuestionDict = myQuestionsArray!.objectAtIndex(count)
die Erklärung? Gut, ich denke, dass erklärt es.
InformationsquelleAutor der Frage kriskendall99 | 2015-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sie mit NSArray:
Dies bedeutet, dass
myQuestionArray
ist ein NSArray. Aber ein NSArray hat keine Art von Informationen über Ihre Elemente. Also, wenn Sie auf diese Zeile:...Swift hat keine Informationen geben, und hat zu machen
currentQuestionDict
eine AnyObject. Aber Sie können nicht Tiefgestellt ein AnyObject, so Ausdrücke wiecurrentQuestionDict["choice1"]
nicht kompilieren.Die Lösung ist die Verwendung von Swift-Typen an. Wenn Sie wissen, was
currentQuestionDict
wirklich ist, geben Sie es als das geben. Zumindest, da Sie scheinen zu glauben, es ist ein Wörterbuch, stellen Sie es; geben Sie es als[NSObject:AnyObject]
(und mehr spezifisch, wenn möglich). Sie können dies auf verschiedene Weise tun; eine Möglichkeit ist, durch Gießen, wenn Sie eine variable anlegen:Kurz gesagt, nie mit NSArray und NSDictionary, wenn Sie es vermeiden können (und Sie können in der Regel vermeiden). Wenn Sie eines erhalten von Objective-C ist, geben Sie es als das, was es wirklich ist, so dass der Swift kann mit ihm arbeiten.
InformationsquelleAutor der Antwort matt
["Key"] hat diesen Fehler verursacht. Neue Swift-update verwenden, sollten Sie
objectForKey
um Ihren Wert. In Sie Fall, ändern Sie einfach den code ;InformationsquelleAutor der Antwort emresancaktar
Dies ist der code, den ich verwendet, um das Problem zu lösen:
Hoffe, das hilft!
InformationsquelleAutor der Antwort Baylor Mitchell