2015-10-08 60 views
3

我希望用户输入一个字符串来访问字典中的一个键,然后返回它的耦合值。我确定这不是我的代码唯一的错误,但试图看看我是否有正确的想法,并希望有一些额外的方向:使用用户输入访问字典返回双精度值

主要的两个问题是编写正确的语法连接用户输入getInput() (字符串)在函数调用func planetAndTime()函数传递我的字典作为参数。

我的另一个问题是我回功能的双重价值。 - > Double`

func getInput() -> String{ 
     let kb: NSFileHandle = NSFileHandle.fileHandleWithStandardInput() 
     let inputData: NSData = kb.availableData 
     let strData = NSString(data: inputData, encoding:NSUTF8StringEncoding) as! String 
return strData 
} 

///////// 

let nameOfPlanetsAndTime:[String:Double] = ["Mercury":0.00000816, 
    "Venus":0.00044, "Mars":0.0000239, "Jupiter":0.00062, "Saturn":0.000204, 
    "Uranus":0.000289, "Neptune":0.000459, "Pluto":0.000794, 
    "Center of the Milky Way":25000.000000, "Earth's Cousin":1400.000000] 

print("Choose planet") 


func planetAndTime(nameOfPlanetsAndTime: [String:Double], userLocation:String) ->Double{ 
    let userLocation = getInput() 
    if (nameOfPlanetsAndTime[userLocation] < 0){ 
     print("Not a Valid Location, Please Try Again")} 
    else{ 
    nameOfPlanetsAndTime[userLocation]! 
     print(nameOfPlanetsAndTime) 
    } 
} 

回答

0

有你的代码,为的雨燕语言是如何工作的,所以我建议要通过为雨燕特点一些很好的例子正式斯威夫特文档的误解是由于几个问题。为了给你一个小小的开局,不过我会选择一段代码。例如,而不是写”

if (nameOfPlanetsAndTime[userLocation] < 0){ 
     print("Not a Valid Location, Please Try Again")} 

你可以写

guard let planet = nameofPlanetsAndTime[userLocation] { 
    print("Not a Valid Location, Please Try Again") 
    return nil 
} 

return planet 

,改变你的功能,可选双的返回类型,所以该方法的签名看起来像

func planetAndTime(nameOfPlanetsAndTime: [String:Double], userLocation:String) ->Double? 

了解可选项在Swift“世界”中是非常重要的,我强烈建议您好好看看如何使用它们,我希望这个小例子能够帮助您。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309

+0

谢谢吉列尔莫。你是对的我绝对需要更多地理解语法。不过,我觉得自己创建程序更有用。我认为这对我来说很容易,但挖到了一个洞。 – Ojay

+0

如果您发现我的答案有用,请将其标记为正确答案? –