Skip to content

Instantly share code, notes, and snippets.

Avatar

Jung Kim godrm

  • Codesquad
  • Seoul, KOREA
  • Twitter @godrm
View GitHub Profile
@godrm
godrm / swift_api_guideline.md
Last active Apr 20, 2022
스위프트 API 가이드라인
View swift_api_guideline.md

1. 스타일/문법 리뷰

1-1 스위프트 API 디자인 가이드라인

https://swift.org/documentation/api-design-guidelines/

  • 사용할 때 기준으로 명확하게 작성하는 게 가장 중요한 지향점이다. 메소드나 프로퍼티 같은 개발 요소는 한 번만 선언하고 반복적으로 사용한다. API를 만들 때는 사용하기 명확하고 편하게 만들어야 한다. 설계를 검증할 때 선언 부분을 읽는 것만으로는 부족하다. 그 대신 사용하는 상황에서 맥락에 맞고 명확한 지 늘 고려해야 한다.

  • 명확한 표현이 압축한 간결성보다 더 중요하다. 스위프트 코드는 압축해서 간결하게 작성할 수 있지만, 단지 글자수를 줄여서 가장 짧은 코드를 만드는 게 목표는 아니다. 스위프트 코드의 간결성은 자연스럽게 반복적으로 재사용하는 코드(boilerplate)를 줄이는 기능과 강한 타입 시스템의 부수효과로 드러날 뿐이다.

@godrm
godrm / LineFactory.swift
Created Apr 6, 2022
HelloPlane 심볼 예제
View LineFactory.swift
import Foundation
class LineFactory {
static var lineCount : Int = 0
static func makeLine() -> Line {
return Line()
}
class func randomLine() -> Line {
let line = Line()
@godrm
godrm / HugeLadderGame.swift
Last active Feb 24, 2022
사다라게임 recfatoring
View HugeLadderGame.swift
struct HugeLadderGame {
struct LadderPlayer {
var name = ""
}
struct InputView {
static func readHeight() -> Int {
print("사다리 높이를 입력해주세요.")
let height = readLine() ?? ""
return Int(height) ?? 0
}
View AsyncReadValue.swift
class ReadValue {
private var thread : Thread? = nil
init(with handler: @escaping (String) -> ()) {
thread = Thread(block: {
while(true) {
let value = readLine() ?? ""
handler(value)
}
})
thread?.start()
@godrm
godrm / 1MemoryDump.swift
Last active Aug 31, 2021
Swift Variable Address Dump to console
View 1MemoryDump.swift
struct Memory {
static func dump<T>(variable: inout T) {
withUnsafePointer(to: &variable) { print($0) }
}
static func dump(with: UnsafeRawPointer) {
let address = Int(bitPattern: with)
print(String(format:"%p", address))
}
View asyncRead.swift
import Foundation
class ReadValue {
var successClosure : ((String)->())? = nil
var value : String = "" {
didSet {
if let closure = successClosure {
closure(value)
}
}
}
@godrm
godrm / AsyncFunc+objc.m
Created Nov 8, 2020
AsyncFunc by Objective-C
View AsyncFunc+objc.m
typedef void (^AVAssetImageGeneratorCompletionHandler)(CMTime, CGImageRef _Nullable, CMTime, AVAssetImageGeneratorResult, NSError * _Nullable);
// ...
- (void)generateCGImagesAsynchronouslyForTimes:(NSArray<NSValue *> *)requestedTimes
completionHandler:(AVAssetImageGeneratorCompletionHandler)handler;
View RacyActor+Phase2.swift
var racyGlobal: [String] = []
@MyGlobalActor
var safeGlobal: [String] = []
class PlainOldClass {
var unprotectedState: String = []
}
actor class RacyActor {
View MyActor+phase1.swift
actor class MyActor {
let immutable: String = "42"
var mutableArray: [String] = []
func synchronousFunction() {
mutableArray += ["syncFunction called"]
}
}
extension MyActor {
View Dinner.swift
func makeDinner() async throws -> Meal {
async let veggies = try chopVegetables()
async let meat = marinateMeat()
async let oven = try preheatOven(temperature: 350)
let dish = Dish(ingredients: await [veggies, meat])
return await try oven.cook(dish, duration: .hours(3))
}