새로 알아간 것들

Debug

assert

import Foundation


func test(i: Int) {
    assert(i != 0, "오마이갓")
}

print(test(i: 0))
print("Hello")

// Assertion failed: 오마이갓: file testAndTest/main.swift, line 5
// 2020-11-19 15:38:46.346298+0900 testAndTest[76954:3528708] Assertion failed: 
// 오마이갓: file testAndTest/main.swift, line 5

git

git add -u

  • 삭제된 파일을 스테이지에 올림

String

replacingOccurrences - 값 변경

var str = "hohoho"
print(str.replacingOccurrences(of: "o", with: "a"))

// hahaha

Array

swapAt - 위치 변경

var name = ["paul", "John", "Hong"]
name.swapAt(0, 1)
print(name)

Combination

//5개 중에 2개를 뽑는 모든 경우의 수
func combos<T>(elements: ArraySlice<T>, k: Int) -> [[T]] {
    if k == 0 {
        return [[]]
    }

    guard let first = elements.first else {
        return []
    }

    let head = [first]
    let subcombos = combos(elements: elements, k: k - 1)
    var ret = subcombos.map { head + $0 }
    ret += combos(elements: elements.dropFirst(), k: k)

    return ret
}

func combos<T>(elements: Array<T>, k: Int) -> [[T]] {
    return combos(elements: ArraySlice(elements), k: k)
}

let numbers = [1,2,3,4,5]
print(combos(elements:numbers,k:2))

/*
returns
[[1, 1], [1, 2], [1, 3], [1, 4], [1, 5], 
[2, 2], [2, 3], [2, 4], [2, 5], [3, 3], 
[3, 4], [3, 5], [4, 4], [4, 5], [5, 5]]
*/

Number of Combination

//combination numbers
func combinations(_ n: Int, choose k: Int) -> Int {
  return permutations(n, k) / factorial(k)
}

combinations(28, choose: 5)    // prints 98280

Permutation

//가능한 모든 경우의 수
func permuteWirth<T>(_ a: [T], _ n: Int) {
    if n == 0 {
        print(a)   // display the current permutation
    } else {
        var a = a
        permuteWirth(a, n - 1)
        for i in 0..<n {
            a.swapAt(i, n)
            permuteWirth(a, n - 1)
            a.swapAt(i, n)
        }
    }
}

let letters = ["a", "b", "c"]
permuteWirth(letters, letters.count - 1)

/* returns
["a", "b", "c"]
["b", "a", "c"]
["c", "b", "a"]
["b", "c", "a"]
["a", "c", "b"]
["c", "a", "b"]
*/

forEach

numbers.forEach {
    print($0)
}

클로저를 리턴하는 함수

  • 선언했던 함수는 그 안의 변수 값이 바뀌지 않는다
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
    var runningTotal = 0
    func incrementer() -> Int {
        runningTotal += amount
        return runningTotal
    }
    return incrementer
}

let incrementByTen = makeIncrementer(forIncrement: 10)

print(incrementByTen()) //10
print(incrementByTen()) //20

let incrementBy7 = makeIncrementer(forIncrement: 7)
print(incrementBy7()) //7
print(incrementByTen()) //30

동기와 비동기

https://usinuniverse.bitbucket.io/blog/syncasync.html

profile
step by step

0개의 댓글