installazione Linux

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 --sdk $(xcrun --show-sdk-path --sdk macosxwc.swift

linguaggio

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

JSON

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