Skip to content

Instantly share code, notes, and snippets.

View WorldDownTown's full-sized avatar
🍺
working with beers

WorldDownTown WorldDownTown

🍺
working with beers
  • Tokyo, Japan
View GitHub Profile
@WorldDownTown
WorldDownTown / PropertyWrapperSample.swift
Created December 27, 2019 06:40
Property Wrapper Sample with UserDefaults
// refers to https://qiita.com/imk2o/items/1771682e9665865851e1
import Foundation
protocol UserDefaultConvertible {
init?(with object: Any)
func object() -> Any?
}
extension UserDefaultConvertible {
@WorldDownTown
WorldDownTown / KanaConverter.swift
Created December 18, 2019 04:51
Kanji to hiragana or katakana
import Foundation
private extension CFStringTokenizer {
var hiragana: String { string(to: kCFStringTransformLatinHiragana) }
var katakana: String { string(to: kCFStringTransformLatinKatakana) }
private func string(to transform: CFString) -> String {
var output: String = ""
while !CFStringTokenizerAdvanceToNextToken(self).isEmpty {
output.append(letter(to: transform))
@WorldDownTown
WorldDownTown / IDProtocol.swift
Last active March 26, 2024 13:55
ID Protocol
public protocol IDProtocol: RawRepresentable, Hashable, Sendable, Identifiable, Codable, CustomStringConvertible where RawValue: Hashable & Sendable & Codable & CustomStringConvertible {}
extension IDProtocol {
public init(_ value: RawValue) {
self.init(rawValue: value)!
}
// MARK: CustomStringConvertible
public var description: String { rawValue.description }
@WorldDownTown
WorldDownTown / append_google_sheets.sh
Last active December 20, 2022 02:04
Google Sheets の最終行に追記するスクリプト
#!/bin/bash
# Google Sheets の最終行に追記するスクリプト
# 訳あって最終行の位置を特定するために行数を取得している
# OAuth周りは下記がわかりやすい
# https://qiita.com/shin1ogawa/items/49a076f62e5f17f18fe5
CLIENT_ID="Google API ClientID"
CLIENT_SECRET="Google API's client secret"
REFRESH_TOKEN="Google API's refresh token"
@WorldDownTown
WorldDownTown / UnitBezier.swift
Last active February 25, 2020 23:34
Solver for cubic bezier curve with implicit control points at (0, 0) and (1, 1)
import PlaygroundSupport
import UIKit
/// Solver for cubic bezier curve with implicit control points at (0, 0) and (1, 1)
/// Based on https://github.com/adobe/webkit/blob/master/Source/WebCore/platform/graphics/UnitBezier.h
struct UnitBezier {
private let a: CGPoint
private let b: CGPoint
private let c: CGPoint
private let epsilon: CGFloat = 0.000001
@WorldDownTown
WorldDownTown / InsertRowsWithoutScrollingViewController.swift
Last active September 27, 2023 06:26
Insert rows in the top of UITableView without scrolling.
import UIKit
final class ViewController: UITableViewController {
private var names: [String] = (50...99).map { String($0) }
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
@WorldDownTown
WorldDownTown / ExtensionCompatibleSample.swift
Last active March 5, 2022 03:10
An example of Extension based on RxSwift in Swift.
public struct Extension<Base> {
public let base: Base
public init(_ base: Base) {
self.base = base
}
}
public protocol ExtensionCompatible {
associatedtype Compatible
var ex: Extension<Compatible> { get set }
@WorldDownTown
WorldDownTown / ExtensionCompatibleSample.swift
Last active June 21, 2018 10:46
An example of Extension based on Kingfisher in Swift.
public final class Extension<Base> {
public let base: Base
public init(_ base: Base) {
self.base = base
}
}
public struct StaticExtension<Base> { }
public protocol ExtensionCompatible {
@WorldDownTown
WorldDownTown / Decorators.go
Created March 24, 2016 02:18 — forked from Nirma/Decorators.go
Using Decorators in Golang to profile performance
package main
import (
"fmt"
"math/rand"
"sort"
"time"
)
@WorldDownTown
WorldDownTown / map_filter_reduce.swift
Created January 24, 2016 06:29 — forked from Nirma/map_filter_reduce.swift
Map and filter implemented with a version of reduce taking list as its reduce argument.
func reduce<T,R>(list: [T], block: (([R],T) -> R?)) -> [R]? {
var acc = [R]()
for x in list {
if let val = block(acc, x) {
acc += [val]
}
}
return acc
}