installare con umake
umake swift
# crea directory sudo mkdir -p /opt/apple/swift # mettere dir nel PATH export PATH="$PATH:/opt/apple/swift" # scarica pacchetto sudo tar -xzf /usr/local/archive/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz # estrai pacchetto # attenzione alle subdir, vanno estratte in /usr/* swift -v # REPL swift -repl // le classi base del linguaggio sono in: ls /usr/local/lib/swift/CoreFoundation/*.h
SDK:
swift -i -sdk $(xcrun --show-sdk-path --sdk macosx) wc.swift
basic compile module in multiple files main.swift
import Foundation let filenames = Process.arguments for filename in filenames { var fileContents:String? = String.stringWithContentsOfFile(filename) } // compilation: swiftc main.swift rectangle.swift let s = Rectangle(base:5, height:6) print("The area of the rectangle is \(s.area()).")
rectangle.swift
import Foundation class Rectangle { var base:Int var height:Int init(base:Int, height:Int) { self.base = base self.height = height } func area() -> Int { return self.base * self.height } }
echo 'println("Hello World")' > script.swift # run the program as script xcrun swift script.swift # compile the program swiftc script.swift -o test
run program as a script, with shebang
#!/usr/bin/xcrun swift -i
swift script.swift
reading text file line by line
import Foundation let s:String? = read("alkaline_metals.txt") let lines:[String]? = s?.split(sep: "\n") var alkaline_metals:[[String]] = [] if lines != nil { for line in lines! { alkaline_metals.append(line.strip.split(sep: " ")) } } println(alkaline_metals) for alkaline_metal in alkaline_metals { println(alkaline_metal) }
import Foundation let filenames = Process.arguments for filename in filenames { var fileContents:String? = String.stringWithContentsOfFile(filename) if let contents = fileContents { var whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet() as NSCharacterSet var newline = NSCharacterSet.newlineCharacterSet() as NSCharacterSet var lines:Array = contents.componentsSeparatedByCharactersInSet(newline) var words:Array = contents.componentsSeparatedByCharactersInSet(whitespace) var numChars = countElements(contents) var numLines = lines.count - 1 var numWords = words.count - 1 println("t(numLines)t(numWords)t(numChars)t(filename)") } else { println("wc.swift: (filename): No such file") } }
standard input
// stdio example import Foundation // reading STDIN func input(msg:String = "") -> String { print(msg) var in_fh = NSFileHandle.fileHandleWithStandardInput() var data = in_fh.availableData in_fh.closeFile() var s = NSString(data: data, encoding: NSUTF8StringEncoding) s = s?.substringToIndex(s!.length - 1) return s! } func read(path:String) -> String? { var fh = NSFileHandle(forReadingAtPath: path) let data = fh?.readDataToEndOfFile() if fh == nil { error("file(\(path)) can't open.") } fh?.closeFile() return NSString(data: data!, encoding: NSUTF8StringEncoding) } func print(s:String, path:String, end:String = "\n") { (s + end).writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding, error: nil) } func error(msg:String) { let stderr = NSFileHandle.fileHandleWithStandardError() stderr.writeData((msg + "\n").dataUsingEncoding(NSUTF8StringEncoding)!) exit(1) } let argv:[String] = NSProcessInfo.processInfo().arguments.map({(x:AnyObject) -> String in x as String})
import Foundation let jsonString = "{ \"foo\": 1, \"bar\": [10, \"apples\"] }" if let jsonData = jsonString.dataUsingEncoding(NSUTF8StringEncoding) { if let jsonObject : AnyObject = NSJSONSerialization.JSONObjectWithData(jsonData, options: .AllowFragments, error: nil) { println("NSDictionary: \(jsonObject)") } } let obj = [ "foo": [1, "Orange"], "bar": 1 ] if let objData = NSJSONSerialization.dataWithJSONObject(obj, options: .PrettyPrinted, error: nil) { if let jsonString2 = NSString(data: objData, encoding: NSUTF8StringEncoding) { println("JSON: \(jsonString2)") } }