AltConf 2015: Swift Thinking
-
Upload
natasha-murashev -
Category
Technology
-
view
125 -
download
2
Transcript of AltConf 2015: Swift Thinking
@NatashaTheRobot
• Swift Newsletter - swiftnews.curated.co
• NatashaTheRobot.com
class Person { let name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } }
let taylorSwift = Person(name: "Taylor Swift", age: 25)
func timeTravelToBirthdayForPerson(var person: Person) { person.age += 1 () } timeTravelToBirthdayForPerson(taylorSwift)
taylorSwift.age // 26
let taylorSwift = Person(name: "Taylor Swift", age: 25)
func timeTravelToBirthdayForPerson(person: Person) { person.age += 1 🎉🎂🎁🎈💥() } timeTravelToBirthdayForPerson(taylorSwift)
taylorSwift.age // 26
let taylorSwift = Person(name: "Taylor Swift", age: 25)
func timeTravelToBirthdayForPerson(var person: Person) { person.age += 1 🎉🎂🎁🎈💥() } timeTravelToBirthdayForPerson(taylorSwift)
taylorSwift.age // 26
let taylorSwift = Person(name: "Taylor Swift", age: 25)
func timeTravelToBirthdayForPerson(var person: Person) { person.age += 1 () } timeTravelToBirthdayForPerson(taylorSwift)
taylorSwift.age // 25
let taylorSwift = Person(name: "Taylor Swift", age: 25)
func timeTravelToBirthdayForPerson(var person: Person) { person.age += 1 🎉🎂🎁🎈💥() } timeTravelToBirthdayForPerson(taylorSwift)
taylorSwift.age // 25
let taylorSwift = Person(name: "Taylor Swift", age: 25)
func timeTravelToBirthdayForPerson(var person: Person) { person.age += 1 🎉🎂🎁🎈💥() } timeTravelToBirthdayForPerson(taylorSwift)
taylorSwift.age // 25
let taylorSwift = Person(name: "Taylor Swift", age: 25)
func timeTravelToBirthdayForPerson(var person: Person) { person.age += 1 🎉🎂🎁🎈💥() } timeTravelToBirthdayForPerson(taylorSwift)
taylorSwift.age // 25
@andy_matuschak
• Functional Swift Conference: Functioning as a Functionalist
• Realm: Controlling Complexity in Swift
–Functional Swift Book
“Almost all types in Swift are value types, including arrays, dictionaries, numbers,
booleans, tuples, and enums. Classes are the exception rather than the rule.”
$ grep -e "^struct " swift.md | wc -l 87
$ grep -e "^enum " swift.md | wc -l 8
$ grep -e "^class " swift.md | wc -l 4
–Sunset Lake Software
“~40% of bugs shipped to customers in the last three years would have been caught
immediately by using Swift”
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var nameTextField: UITextField! @IBOutlet weak var ageTextField: UITextField! var personViewModel = PersonViewModel() override func viewDidLoad() { super.viewDidLoad() } func textFieldDidEndEditing(textField: UITextField) { personViewModel.name = nameTextField.text personViewModel.age = ageTextField.text } }
struct PersonViewModel { var name: String? var age: String? enum InputError: ErrorType { case InputMissing case AgeIncorrect } func createPerson() throws -> Person { guard let age = age, let name = name else { throw InputError.InputMissing } guard let ageFormatted = Int(age) else { throw InputError.AgeIncorrect } return Person(name: name, age: ageFormatted) } }
class ViewController: UIViewController, UITextFieldDelegate { var personViewModel = PersonViewModel()
// ... truncated ... // @IBAction func onSubmitButtonTap(sender: AnyObject) { view.endEditing(true) do { let person = try personViewModel.createPerson() print("Success! Person created. \(person)") } catch PersonViewModel.InputError.InputMissing { print("Input missing!") } catch PersonViewModel.InputError.AgeIncorrect { print("Age Incorrect!") } catch { print("Something went wrong, please try again!") } }
}