Skip to content

Instantly share code, notes, and snippets.

View ezura's full-sized avatar

Yuka Ezura ezura

View GitHub Profile
@ezura
ezura / lazy.swift
Last active October 12, 2017 08:42
lazy
public class Lazy<T> {
private let initializer: () -> T
private var _value: T!
public var value: T {
get {
// TODO: mutex
switch _value {
case .none:
_value = initializer()
@ezura
ezura / CodePiece.swift
Created October 6, 2017 06:15
Never の function 呼び出すの、Swift だとこんな感じかなぁ…。 とりあえず、unsafeBitCast で Never と memory layout が同じ型 (Void) にキャストすると実行までできた( 'ω') #CodePiece
// goal: call `(Never instance).foo()`
extension Never {
func foo() { print("exec") }
}
unsafeBitCast((), to: Never.self).foo() // print "exec"
(nil as Never?)?.foo() // ()?
fatalError().foo() // runtime error
precedencegroup GroupA {
associativity: none
}
precedencegroup GroupB {
higherThan: GroupA
associativity: none
}
@ezura
ezura / CodePiece.swift
Created September 28, 2017 08:27
昔は不思議だったけど、今ならこの挙動が納得できる( 'ω') #CodePiece
func f() {
defer {
print("defer") /* <- ② */
}
return /* <- ③ */ print("return value") /* <- ① */
}
class C {
var v: () {
get { }
@ezura
ezura / CodePiece.swift
Created September 19, 2017 13:28
`_` にマッチするよね… #swift #CodePiece
switch "" as Optional {
case _:
print("_")
case _?: // ⚠️ Case will never be executed
print("_?")
//case _??: // ❗️error: '?' pattern cannot match values of type 'String'
// print("_??")
default:
print("s")
}
@ezura
ezura / CodePiece.swift
Created September 19, 2017 13:20
`_?` ってできるのか…って思った( 'ω') #CodePiece
switch "" as Optional {
case _?:
print("_?")
default:
print("s")
}
@ezura
ezura / CodePiece.swift
Created September 12, 2017 12:30
あれ?`Protocol` っていう型標準であったっけ??(´・ω・`)? #CodePiece
var p: Protocol
extension Optional: CustomStringConvertible {
public var description: String {
switch self {
case .none:
return ""
case .some(let wrapped):
return "\(wrapped)"
}
}
}
@ezura
ezura / CodePiece.swift
Created September 7, 2017 13:44
うっかりOptinalを文字列に変換してしまい、"Optinal("こんにちは")" みたいな文字列になってしまうやつをやっつけてみた( 'ω') #CodePiece
"\(Normal() as Optional)"
// -> "Optional(description)"
"\(Force() as Optional)"
// -> "description"
// ------------------
struct Normal: CustomStringConvertible {
var description: String { return "\(#function)" }
@ezura
ezura / CodePiece.swift
Created September 5, 2017 13:13
上も下も挙動同じだけど、ニュアンスが違う気がする( 'ω') #CodePiece
let any: Any = 🍎()
if let any = any as? 🌳 {
// do something
}
// -----------
if case let any as 🌳 = any {
// do something