Skip to content

Instantly share code, notes, and snippets.

@denkeni
denkeni / Auto-Layout-Programmatically-1-2.swift
Last active March 27, 2017 14:50
Auto Layout Programmatically 1-2
subviewB.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(subviewB)
constraints.append(NSLayoutConstraint(item: subviewB, attribute: .top, relatedBy: .equal,
toItem: view, attribute: .top, multiplier: 1.0, constant: 150))
// subviewA.top = 1.0 * view.top + 150
constraints.append(NSLayoutConstraint(item: subviewB, attribute: .bottom, relatedBy: .equal,
toItem: view, attribute: .bottom, multiplier: 1.0, constant: -150))
// subviewA.bottom = 1.0 * view.bottom - 150
constraints.append(NSLayoutConstraint(item: subviewB, attribute: .left, relatedBy: .equal,
toItem: view, attribute: .left, multiplier: 1.0, constant: 100))
@denkeni
denkeni / Auto-Layout-Programmatically-1-1.swift
Last active March 27, 2017 14:50
Auto Layout Programmatically 1-1
subviewA.translatesAutoresizingMaskIntoConstraints = false // 這是純程式碼寫 Auto Layout 的大雷:必須設定這一行!
view.addSubview(subviewA)
var constraints = [NSLayoutConstraint]()
constraints.append(NSLayoutConstraint(item: subviewA, attribute: .centerX, relatedBy: .equal,
toItem: view, attribute: .centerX, multiplier: 1.0, constant: 0))
// subviewA.centerX = 1.0 * view.centerX + 0 即 subviewA.centerX = view.centerX
constraints.append(NSLayoutConstraint(item: subviewA, attribute: .centerY, relatedBy: .equal,
toItem: view, attribute: .centerY, multiplier: 1.0, constant: 0))
// subviewA.centerY = 1.0 * view.centerY + 0 即 subviewA.centerY = view.centerY
constraints.append(NSLayoutConstraint(item: subviewA, attribute: .width, relatedBy: .equal,
@denkeni
denkeni / SwiftErrorHandling.swift
Created November 18, 2015 11:23
Swift Error Handling - A Better Way
//: Playground - noun: a place where people can play
// 1. Proposed Error Handling
enum Error: ErrorType {
case IsNegative(String)
case IsPositive(String)
}
func isZero(number: Int) -> Error? {
if number != 0 {
@denkeni
denkeni / apple-watch-password-lock-mechanism.md
Last active August 29, 2015 14:24
How Apple Watch Password Lock Works
addObserver(IPHONE_DID_UNLOCKED) {
  if isOnSkin {
    locked = false
  }
}

addObserver(WATCH_OFF_SKIN) {
  locked = true
}
@denkeni
denkeni / SwiftSyntaxDesignComplexity.md
Last active August 29, 2015 14:24
Swift Syntax Design Complexity

Check Class/Type

Objective-C

What you need to know are isKindOfClass: and class:

A *a = [[A alloc] init];
Class AClass = [A class];

BOOL isAClass1 = [a isKindOfClass:[A class]];