Skip to content

Instantly share code, notes, and snippets.

View brownsoo's full-sized avatar
🐢
Step by step

brownsoo brownsoo

🐢
Step by step
View GitHub Profile
@brownsoo
brownsoo / BatchUpdates.swift
Last active February 1, 2024 00:42
UIKit 콜렉션뷰 배치 업데이트 위한 비교 유틸
import Foundation
import UIKit
typealias BatchUpdatable = Identifiable & Equatable
/// 배치 업데이트를 위한 비교 모델
///
struct BatchUpdates {
let deleted: [Int]
@brownsoo
brownsoo / UIButton+alignTextBelow.swift
Created January 12, 2024 09:49
UIButton image vertical aligned with text
// from; https://developer-eungb.tistory.com/30
extension UIButton {
func alignTextBelow(spacing: CGFloat = 4.0) {
guard let image = self.imageView?.image else {
return
}
guard let titleLabel = self.titleLabel else {
return
@brownsoo
brownsoo / TaskCancelledOnDismissView.swift
Created November 30, 2023 00:07
SwiftUI 예시 : 뷰가 사라지면 Task는 자동 취소
//
// TaskCancelledOnDismissView.swift
// SwiftUITaskWorkout
//
// Created by Paul Hudson.
// https://twostraws.gumroad.com/l/concurrency
//
import SwiftUI
@brownsoo
brownsoo / TaskWithIdView.swift
Created November 30, 2023 00:05
SwiftUI 예시 - id 변경으로 Task가 재실행됨
//
// TaskWithIdView.swift
// SwiftUITaskWorkout
//
//
// Created by Paul Hudson.
// https://twostraws.gumroad.com/l/concurrency
import SwiftUI
@brownsoo
brownsoo / GetPermutations.swift
Created October 10, 2023 04:56
배열의 조합 구하기 (순서무관)
/// 배열의 조합 구하기
/// 순서에 상관없이 같은 요소가 포함되어 있다면, 같은 조합으로 처리 (결국 처음 제공되는 배열 요소들의 순서를 유지한다)
/// - Parameters:
/// - arr: 제공되는 배열
/// - select: 몇개의 요소를 선택해서 조합할지 결정
/// - Returns: 제공된 배열에서 select 개를 선택해서 조합된 새 배열
func getPermutations(_ arr: [Book], select: Int) -> [[Book]] {
var results: [[Book]] = []
if select == 1 {
return arr.map { [$0] }
@brownsoo
brownsoo / IntRangeCase.swift
Created September 30, 2023 05:17
swift - switch range case
extension Int {
/// 숫자 범위에 따라 텍스트 표시
func readableCount() -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.groupingSeparator = ""
formatter.maximumFractionDigits = 1
switch self {
case _ where self < 1000:
return "\(self)"
@brownsoo
brownsoo / GetAllPermutations.swift
Last active October 10, 2023 04:57
배열 요소의 모든 조합 구하기 (순열, 순서고려)
/// 배열의 모든 조합 구하기 (순열)
/// 순서에 상관하여 같은 요소라도 순서가 다르면 다른 조합으로 처리
/// - Parameters:
/// - arr: 제공되는 배열
/// - select: 몇개의 요소를 선택해서 조합할지 결정
/// - Returns: 제공된 배열에서 select 개를 선택해서 조합된 새 배열
func getAllPermutations(_ arr: [Int], select: Int) -> [[Int]] {
var results: [[Int]] = []
if select == 1 {
return arr.map { [$0] }
@brownsoo
brownsoo / iterable_extension.dart
Created September 25, 2023 02:39
dart iterable 에서 널러블 아이템 조회 확장함수
extension NullIterable<E> on Iterable<E> {
E? getFirstOrNull(bool test(E element)) {
try {
return this.firstWhere(test);
} catch (e) {
return null;
}
}
}
@brownsoo
brownsoo / ArrayExtension+Page.swift
Created September 19, 2023 14:59
swift array extension to access a property of elements
/// [Page] 배열에서 movies 값만 모아 가져오기.
extension Array where Element == Page {
var movies: [String] {
flatMap { $0.movies }
}
}
/// Page 샘플
struct Page {
let movies: [String]
@brownsoo
brownsoo / cache_workout.js
Created December 30, 2022 12:24
캐시 구현 목업 from Node.js 하이 퍼포먼스
// from Node.js 하이 퍼포먼스
var users = {};
function getUser(id, next) {
if (users.hasOwnPropoerty(id)) {
if (users[id].hasOwnProperty("data")) {
return next(null, users[id].data);
}
// 아직 값이 없음