



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)")
}
}