【发布时间】:2017-10-13 06:56:34
【问题描述】:
我正在编写一个应用程序,以使用 Swift 显示和浏览一系列问题和答案。我目前有一个问题字典和相关答案,然后我使用 .map 创建一个“抽认卡”对象数组(每个都包含一个问题和相关答案)。
当我从数组中访问这些对象时,由于某种原因,返回的第 0 项似乎是我字典中的第二项而不是第一项(例如“问题 2”)。有人可以解释这是为什么吗?这是创建数据数组并提供将项目返回到相关视图控制器的方法的类:
import Foundation
class Deck {
// Create constant to hold the deck of cards
private var cards: [Flashcard]
var bookmark: Int // Remembers which card we are on
init() {
let cardData = ["Question 1" : "Answer 1",
"Question 2" : "Answer 2",
"Question 3" : "Answer 3"]
cards = cardData.map { Flashcard(question: $0, answer: $1) }
bookmark = 0 // Start with bookmark on first item in deck
}
// Getter method to return current card
public func getCurrentCard() -> Flashcard {
print("Bookmark set to \(bookmark)")
return cards[bookmark]
}
// Getter method to return the next card in the deck
public func getNextCard() -> Flashcard {
bookmark += 1
print("Bookmark set to \(bookmark)")
return cards[bookmark]
}
// Getter method to return previous card in deck
public func getLastCard() -> Flashcard {
bookmark -= 1
print("Bookmark set to \(bookmark)")
return cards[bookmark]
}
}
然后这是我请求显示对象的视图控制器:
import UIKit
class QuestionController: UIViewController {
// Outlet for the 'question' label
@IBOutlet weak var questionTextView: UITextView!
// Outlet for the next button
@IBAction func nextQuestion(_ sender: UIButton) {
flashcard = deck.getNextCard()
questionTextView.text = flashcard?.question
}
// Outlet for last button
@IBAction func lastQuestion(_ sender: UIButton) {
flashcard = deck.getLastCard()
questionTextView.text = flashcard?.question
}
// variable to hold current flashcard
var flashcard: Flashcard?
let deck = Deck() // Holds deck of data
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
flashcard = deck.getCurrentCard()
questionTextView.text = flashcard?.question
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// Prepare flashcard item to be passed to the answer controller before segue
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let answerController = segue.destination as? AnswerController {
answerController.flashcard = flashcard
}
}
}
当我运行应用程序时,显示的第一个问题是“问题 2”,而我期望它是“问题 1”...?
【问题讨论】:
标签: arrays swift dictionary