Skip to content

Instantly share code, notes, and snippets.

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

Keisuke Shoji WorldDownTown

🍺
working with beers
  • Tokyo, Japan
View GitHub Profile
@WorldDownTown
WorldDownTown / LoadingIndicator.swift
Last active February 24, 2020 13:08
Loading circle indicator
import PlaygroundSupport
import UIKit
final class LoadingIndicator: UIView {
var color: UIColor = .blue
private var index: Int = 0
private let lap: TimeInterval = 2
private let movingAngle: CGFloat = 5 / 6 * .pi2
private let rotationCount: Int = 6
private let minimumAngle: CGFloat = .pi2 / 24
@WorldDownTown
WorldDownTown / TimerIndicator.swift
Last active January 31, 2020 07:10
Timer Indicator
import UIKit
import PlaygroundSupport
import UIKit
final class TimerIndicator: UIView {
deinit {
displayLink?.invalidate()
}
@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 November 8, 2024 05:48
ID Protocol
public protocol IDProtocol: RawRepresentable, Hashable, Sendable, Identifiable, Codable, CustomStringConvertible where RawValue: Hashable & Sendable & Codable & CustomStringConvertible {
init(rawValue: RawValue)
}
public extension IDProtocol {
init(_ rawValue: RawValue) {
self.init(rawValue: rawValue)
}
// MARK: CustomStringConvertible
@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 {