讓我首先說我是編程新手,因此這可能只是一個愚蠢的新手錯誤。我確實嘗試在網上找到答案,但也許我沒有找到正確的東西,因爲我找不到解決方案。爲什麼我的Swift代碼不能根據.json數據中的值正確計算分數
簡而言之,我試圖根據許多變量計算瑣事遊戲應用中的分數。其中一個變量決定了基於.json文件內的數據回答問題的「值」。也就是說,所有的問題,答案,值等都存儲在.json文件中。
的以.json文件的格式如下:
[
{
"id":"1",
"question":"Which planet do we live on?",
"answers":[
"Earth",
"Mars",
"Venus",
"Jupiter"
],
"difficulty":"Beginner",
"value":"1"
},
{
"id":"2",
"question":"In what year did the Prime Minister of Australia literally just vanish?",
"answers":[
"1967",
"1975",
"2001",
"1939"
],
"difficulty":"Hardest",
"value":"6"
},
而且以.json數據持續這樣的數百個問題。
現在我斯威夫特代碼中我加載我以.json數據是這樣的:
func LoadAllQuestionsAndAnswers()
{
let path = NSBundle.mainBundle().pathForResource("trivia", ofType: "json")
let jsonData : NSData = NSData(contentsOfFile: path!)!
allEntries = (try! NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers)) as! NSArray
//println(allEntries)
}
我也聲明以下變量:
var questionvalue :String?
var currentgoals :Int! = 0
var currentbehinds :Int! = 0
var currenttotal :Int! = 0
和代碼我使用的加載我問題是:
func LoadQuestion(index : Int)
{
let entry : NSDictionary = shuffledQuestions[index] as! NSDictionary
let question : NSString = entry.objectForKey("question") as! NSString
let arr : NSMutableArray = entry.objectForKey("answers") as! NSMutableArray
let questionvalue : NSString = entry.objectForKey("difficulty") as! NSString
let QID : NSString = entry.objectForKey("id") as! NSString
if let a = arr.objectAtIndex(0) as? String {
self.answertext = a
}
現在的得分。評分涉及'目標','背後'和'總'。目標值6分,落後值1分。根據問題的難度,用戶可以得分1,2,3或4落後或進球。
的代碼爲我的得分相關的位如下:
func CheckAnswer(answerNumber : Int)
{
if(answerNumber == currentCorrectAnswerIndex)
{
// we have the correct answer
if questionvalue == "Beginner" {currentbehinds = currentbehinds+1}
else{
if questionvalue == "Easy" {currentbehinds = currentbehinds+2}
else{
if questionvalue == "Intermediate" {currentbehinds = currentbehinds+3}
else{
if questionvalue == "Hard" {currentbehinds = currentbehinds+4}
else{
if questionvalue == "Hardest" {currentgoals = currentgoals+1}
}
}
}
}
labelCurrentGoals.text = "\(currentgoals)"
labelCurrentBehinds.text = "\(currentbehinds)"
labelCurrentTotal.text = "\(currenttotal)"
currenttotal = (currentgoals*6) + currentbehinds
正如你所看到的,實際的計算我的SWIFT代碼中完成的,他們不使用來自以.json數據進行文件。我只想引用存儲在.json文件中的「難度」或「值」作爲確定應用程序使用的Swift內的哪種計算方法。但是,每當用戶得到正確答案時,分數值都保持爲零。
我還使用通過改變存儲在「值」標籤從我以.json文件中的數據試了試var questionvalue :String?
到var questionvalue :Int!
和改變我的LoadQuestion功能let questionvalue : NSString = entry.objectForKey("difficulty") as! NSString
到let questionvalue : NSInteger = entry.objectForKey("value") as! Int
和改變我的CheckAnswer功能,因此,它的這些值引用相反(即「1」而不是「初學者」,等等)。
我也嘗試更改我的.json文件中的數據,以便數值不是字符串。
但唉這一切都沒有奏效。作爲一個新手,我確信我只是錯過了一些明顯的東西,但我似乎無法找到答案。我懷疑我沒有在這裏或在Google上尋找正確的東西。如果是這樣的話,我會很高興看到一些鏈接。或者,如果像我懷疑的那樣直截了當,我的代碼解決方案將會很棒。
首先,非常感謝您通過調試過程。這非常有幫助。你是對的,我沒有意識到'如果' - 這應該使我的代碼在很多地方變得更清潔!現在,我沒有在我的問題(我的錯!)中提到這一點,但我已經嘗試通過刪除'let'來更改我的LoadQuestion中的代碼,但是這樣做會導致Xcode生成錯誤。但是,我再次嘗試這一點,並提示將其更改爲:'questionvalue = entry.objectForKey(「困難」)! NSString作爲字符串(即添加'作爲字符串'的結束。這工作!!謝謝!:) – Monomeeth
此外,謝謝你解釋我的原始'let questionvalue:NSString = entry.objectForKey(「難度」)爲! NSString'實際上並沒有爲我之前聲明的變量賦值。這是我的另一個學習。 :) – Monomeeth
因爲'questionvalue'是一個'String',你不能給它分配一個'NSString'值。你可以使用'as String'將'NSString'類型轉換爲'String',這就是爲什麼'as! NSString作爲字符串'工作。你實際上可以強制轉換爲'String'。例如。 'entry.objectForKey(「難度」)爲! String' – Kevin