@acmupm
@acmupm
@acmupm
let a = 5 //Valor inmutable
a = 6 //Error de compilación
var b = 6 //Valor mutable
b = 4let f: (Int) -> Int = { x in 2 * x }
let f2 = { 2 * $0 }
let f3 = { 4 * $0 * $1 }func divide(_ a: Int, _ b: Int) -> Int? {
if b == 0 {
return nil // También valdría return .none
} else {
return a / b
}
}
let div: Int? = divide(10, 5)
let res: Int = div.map { $0 * 9 }
let res2: Int? = div.flatMap { divide($0, 2) }
let ints = [1, 2, 3]
let decimals = [1.0, 2.0, 3.0]
let strings = ["1", "2", "3"]@acmupm
struct Pair<A, B> {
var first: A
var second: B
}
func updateFirst<A, B>(_ p: Pair<A, B>, _ value: A) {
var p2 = p
p2.first = value
}
let pair = Pair(first: 1, second: 2)
print(pair)
updateFirst(pair, 5)
print(pair)@acmupm
extension Int {
var squared: Int {
return self * self
}
}
protocol Multipliable {
func multiply(by n: Self) -> Self
}
extension Int: Multipliable {
func multiply(by n: Int) -> Int {
return self * n
}
}
extension Double: Multipliable {
func multiply(by n: Double) -> Double {
return self * n
}
}
extension Multipliable {
var squared: Self {
return multiply(by: self)
}
}@acmupm
protocol Addable {
static var empty: Self { get }
static func sum(_ x: Self, _ y: Self) -> Self
}
extension Int: Addable {
static var empty: Int {
return 0
}
static func sum(_ x: Int, _ y: Int) -> Int {
return x + y
}
}func sum <A: Addable> (_ lst: [A]) -> A {
return lst.reduce(A.empty, { A.sum($0, $1) })
}extension Double: Addable {
static var empty: Double {
return 0
}
static func sum(_ x: Double, _ y: Double) -> Double {
return x + y
}
}"Typeclasses"!
@acmupm
@acmupm
@acmupm
@acmupm
let var1: UIView? = UIView() // ref: 1
if 1 == 1 {
let var2 = var1 // ref: 2
} // ref: 1
weak var varWeak = var1 //ref: 1
var1 = nil // ref: 0 Objeto destruído.@acmupm
@acmupm
Alternativa: Diseño de UI por código
@acmupm
Consejo: Agrupar las vistas de la app en diferentes storyboards.
@acmupm
@acmupm
Su funcionamiento es muy sencillo:
Constraints
Priorities
Content Hugging
Compression Resistance
Entrada
Motor de autolayout
Salida
(posición y tamaño de los rectángulos)
Alignment rects
@acmupm
Problemas de diseño:
@acmupm
@acmupm
@acmupm
@acmupm
@acmupm
@acmupm
@acmupm
@acmupm
@acmupm
@acmupm
@acmupm
@acmupm
En Swift: librería RxSwift
@acmupm
@acmupm
@acmupm
@acmupm