如何在Swift游乐场玩STDIN

时间:2016-02-13 13:15:15

标签: ios xcode swift swift2 swift-playground

我知道要在STDIN和STDOUT中编程,我们需要在Xcode中创建一个命令行项目。 但是如何在操场上进行标准输入。

每当我尝试在游乐场中运行此类代码时

var input = readLine()!

我总是收到此错误

  

执行被中断,原因是:EXC_BAD_INSTRUCTION   (代码= EXC_l386_INVOP,子代码= 0x0)

是否可以在游乐场参加STDIN?

更新

我知道这个错误是因为 nil input变量,但想知道如何克服这个nil值。

5 个答案:

答案 0 :(得分:5)

SWIFT 3的固定解决方案

要使其工作,请创建一个新的命令行工具项目。

转到"文件" - > "新" - > "项目" - > " MACOS" - > "命令行工具"。

import Foundation

print("Hello, World!")


func solveMefirst(firstNo: Int , secondNo: Int) -> Int {
    return firstNo + secondNo
}

func input() -> String {
    let keyboard = FileHandle.standardInput
    let inputData = keyboard.availableData
    return NSString(data: inputData, encoding:String.Encoding.utf8.rawValue) as! String
}

let num1 = readLine()
let num2 = readLine()

var IntNum1 = Int(num1!)
var IntNum2 = Int(num2!)

print("Addition of numbers is :  \(solveMefirst(firstNo: IntNum1!, secondNo: IntNum2!))")

使用CMD + R

运行项目

答案 1 :(得分:3)

Playground无法从推荐行读取输入。

您可以使用自定义" readLine()"函数和全局输入变量,输入数组中的每个元素都显示一行:

import Foundation

var currentLine = 0
let input = ["5", "5 6 3"]

func readLine() -> String? {
    if currentLine < input.endIndex {
        let line = input[currentLine]
        currentLine += 1
        return line
    } else {
        return nil
    }
}

let firstLine = readLine() //  5
let secondLine = readLine() // 5 6 3
let thirdLine = readLine() // nil

答案 2 :(得分:2)

尝试使用Optional Chaining

if let input = readLine() {
    print("Input: \(input)")
} else {
    print("No input.")
}

答案 3 :(得分:0)

从命令行获取输入,如Console.ReadLine ... Chalkers 有如下解决方案。

func input() -> String {
    var keyboard = NSFileHandle.fileHandleWithStandardInput()
    var inputData = keyboard.availableData
    return NSString(data: inputData, encoding:NSUTF8StringEncoding) as! String
}

如果它不起作用,请进一步询问。

答案 4 :(得分:-1)

转到

新&gt;项目&gt; MacOs&gt;命令行工具

然后你可以申请:

让value1:String?

value1 = readLine()
print(value ?? "")

“”表示默认值