Input from the keyboard in command line application
The correct way to do this is to use readLine
, from the Swift Standard Library.
Example:
let response = readLine()
Will give you an Optional value containing the entered text.
I managed to figure it out without dropping down in to C:
My solution is as follows:
func input() -> String { var keyboard = NSFileHandle.fileHandleWithStandardInput() var inputData = keyboard.availableData return NSString(data: inputData, encoding:NSUTF8StringEncoding)!}
More recent versions of Xcode need an explicit typecast (works in Xcode 6.4):
func input() -> String { var keyboard = NSFileHandle.fileHandleWithStandardInput() var inputData = keyboard.availableData return NSString(data: inputData, encoding:NSUTF8StringEncoding)! as String}
It's actually not that easy, you have to interact with the C API. There is no alternative to scanf
. I've build a little example:
main.swift
import Foundationvar output: CInt = 0getInput(&output)println(output)
UserInput.c
#include <stdio.h>void getInput(int *output) { scanf("%i", output);}
cliinput-Bridging-Header.h
void getInput(int *output);