如何将readLine()的Swift 3输出转换为Integer?

时间:2016-07-03 07:12:25

标签: swift command-line-interface readline

在您阅读整篇文章之前,请不要将其标记为重复。这是Swift 3特有的。

我的函数有Ints,Floats等参数。我想获取readLine()的输出并让Swift接受readLine()的输出作为这些类型,但不幸的是readLine()输出一个字符串?当我尝试转换它时告诉我它没有被打开。我需要帮助。我使用的是Ubuntu 16.04。

例如,如果我有area(width: 15, height: 15),我如何用包含readLine()的两个常量或者readLine()的任何等价来替换15和15来接受来自终端用户的输入?

另请注意,我写的程序是专门做数学的,因为大多数人似乎对字符串感到满意,这实际上是一个基于CLI的计算器。

编辑1(lol)好的,这里有一个更准确的解释。以下代码将打印梯形区域:

import Foundation

func areaTrapezoid(height: Float, baseOne: Float, baseTwo: Float) {
    let inside = baseOne + baseTwo
    let outside = 0.5 * height
      let result = outside * inside
        print("Area of Trapezoid is \(result)")
  }

areaTrapezoid(height: 10, baseOne: 2, baseTwo: 3)

因此,梯形的高度为10个单位,两个基部的长度分别为2和3。但是,我想做一些事情:

import Foundation

func areaTrapezoid(height: Float, baseOne: Float, baseTwo: Float) {
    let inside = baseOne + baseTwo
    let outside = 0.5 * height
      let result = outside * inside
        print("Area of Trapezoid is \(result)")
  }

let h = readLine()
areaTrapezoid(height: h, baseOne: 2, baseTwo: 3)

除非已经很明显,readLine()将输出一个可选字符串,而不是Float。我希望用户能够以交互方式通过CLI输入数字,如果愿意的话。我刚刚学习Swift,但是当我学习那门语言时,我在C ++中做了类似的事情。感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:5)

readLine()返回一个可选字符串。

要解包String,可以使用if let,并将String转换为整数,使用Int()

示例:

import Foundation
if let typed = readLine() {
  if let num = Int(typed) {
      print(num)
  }
}

我们说你提示用户两次:

let prompt1 = readLine()
let prompt2 = readLine()

然后:

if let response1 = prompt1, 
    response2 = prompt2, 
    num1 = Int(response1), 
    num2 = Int(response2) {
    print("The sum of \(num1) and \(num2) is \(num1 + num2)")
}