Skip to content

Instantly share code, notes, and snippets.

@takasek
takasek / CodePiece.swift
Created April 17, 2018 08:16
ここらへんのジェネリクスのネストの挙動の理解、だいぶ昔のまま止まってたかも #CodePiece
struct A<T> {
let t: T
struct S1 {
let t: T
}
struct S2<T> {
let t: T
}
func xxx() -> S1 {
return S1(t: t)
@takasek
takasek / CodePiece.swift
Created April 4, 2018 15:34
依存グラフの解決を行うオブジェクトが必要な理由 #CodePiece
do {
struct A {}
struct B { let a: A }
struct C { let b: B }
// 何もしないと、「AをinjectしたC」を作りたいときこうなる
let c = C(b: B(a: A()))
// 「CがBに依存している」という知識は、本来Cを使う場合は不要なはず
// そのため、依存グラフを解決する Resolver を考える
@takasek
takasek / CodePiece.swift
Last active March 27, 2018 15:44
ポプテピピックが完成したら竹書房を破壊するSwiftコード #CodePiece
import Foundation
enum PopTeamEpic: Int {
case ポ,プ,テピ,ピック
}
struct 蒼井翔太: Sequence, IteratorProtocol {
mutating func next() -> PopTeamEpic? {
return PopTeamEpic(rawValue: Int(arc4random_uniform(4)))
}
}
@takasek
takasek / CodePiece.swift
Last active March 19, 2018 04:39
`Single<T>` とそれを叩く `PublishSubject<Void>` を `inProgress, success(T), failure(E)` の川に変換 #CodePiece
enum AsyncState<T, E: Error> {
case inProgress
case success(T)
case failure(E)
}
extension Observable {
static func from<T, E: Error>(
trigger: PublishSubject<Void>,
execute asyncProcess: @escaping () -> Single<T>,
@takasek
takasek / CodePiece.swift
Created January 20, 2018 07:16
structのmutating funcでも、クロージャ内ではselfを書き替えることはできないよという話 #love_swift #CodePiece
struct A {
var hoge = "a" {
didSet { print("fixed", hoge) }
}
// たとえmutatingなfuncの中でも、
mutating func fix() {
// クロージャの中ではselfの書き換えはできない
DispatchQueue.main.async {
self.hoge = "b" // Error: Closure cannot implicitly capture a mutating self parameter
@takasek
takasek / CodePiece.swift
Created December 5, 2017 03:35
RxSwiftのflatMapFirstで `isLoading` 的なフラグ管理相当のことができることの確認 #CodePiece
let trigger = PublishSubject<Void>()
func fetch() -> Single<String> {
return Single.create { observer in
print("🛫")
DispatchQueue.global().async {
usleep(2_500_000)
print("🛬")
observer(.success("レスポンス"))
}
import Foundation
struct Default: LocalizedError {
}
struct E: LocalizedError {
let errorDescription: String? = "e"
}
struct F: LocalizedError {
let failureReason: String? = "f"
}
struct R: LocalizedError {
@takasek
takasek / CodePiece.swift
Created November 15, 2017 12:42
さっきの挙動びっくりした気がしたけど、やってることはこれと同じか。そっか。 #CodePiece
struct A {
struct B {
var i: Int
}
var b: B
var xxx: B {
get { return b }
set { b = newValue }
}
@takasek
takasek / CodePiece.swift
Created November 15, 2017 11:35
ArrayやDictionaryの中身のstructを取り出して、その場でmutatingな処理をしたとき、ちゃんとarr/dict自体も書き換わってくれる。へー。 #CodePiece
struct Hoge {
var int: Int
}
// -----------------------
// Array 編
var arr: [Hoge] = [
Hoge(int: 1),
Hoge(int: 2),
@takasek
takasek / Fuga.swift
Last active November 11, 2017 11:34
privateなAPIをテストする方法を考えてみた ref: http://qiita.com/takasek/items/d1f11394b6df2f3f3cc0
/// Fugaをprivateに保つために作るTest用ラッパー。Fugaと同じファイル内に書く
final class FugaTester {
private let base: Fuga
init(args: (x: Int, y: Int)) {
base = Fuga(x: args.x, y: args.y)
}
var x: Int { return base.x }
var y: Int { return base.y }
func doSomething(with string: String) -> String {
return base.doSomething(with: string)