Skip to content

Instantly share code, notes, and snippets.

View norio-nomura's full-sized avatar

Norio Nomura norio-nomura

View GitHub Profile
@norio-nomura
norio-nomura / My_find.swift
Last active August 29, 2015 14:13
guessing Swift.find() implementation and verifying it by SIL / Swiftのfind()実装を推測してSILで検証
func my_find<C : CollectionType where C.Generator.Element : Equatable>(domain: C, value: C.Generator.Element) -> C.Index? {
for idx in indices(domain) {
if domain[idx] == value {
return idx
}
}
return nil
}
@norio-nomura
norio-nomura / MyPlaygroundTemplate.swift
Last active August 29, 2015 14:14
Playgroundのテンプレートにbenchmark定義を入れてる。
import Foundation
import QuartzCore
func benchmark<T>(block: () -> T) -> String {
let measure = {(begin: CFTimeInterval) -> CFTimeInterval in block(); return CACurrentMediaTime() - begin}
let result = String(format: "Total Runtime: %g sec", measure(CACurrentMediaTime()))
println(result)
return result
}
@norio-nomura
norio-nomura / enumCast.swift
Last active August 29, 2015 14:14
enumCast()
import Foundation
func enumCast<C1, C2: RawRepresentable where C2.RawValue == C1>(rawValue: C1?) -> C2? {
if let rawValue = rawValue {
return C2(rawValue: rawValue)
} else {
return nil
}
}
@norio-nomura
norio-nomura / description.md
Last active August 29, 2015 14:16
「【翻訳】関数型プログラミング入門 | POSTD」の「パイプラインを使う」をSwiftで書いてみた。
@norio-nomura
norio-nomura / myFlatMap.swift
Last active August 29, 2015 14:17
Implementing flatMap() of Swift 1.2 beta 3 by myself
// Playground - noun: a place where people can play
import Foundation
// MARK: https://gist.github.com/norio-nomura/bc00e3ad6b4331c6a862
extension Array {
func myFlatMap<U>(@noescape transform: (T) -> [U]) -> [U] {
var r = Array<U>()
for e in self {
r += transform(e)
@norio-nomura
norio-nomura / datesMatchingComponents.swift
Created March 18, 2015 15:04
SequenceOf<T>とGeneratorOf<T>を使う
import Foundation
func dates(#matchingComponents: NSDateComponents, var startDate: NSDate = NSDate(), endDate: NSDate = NSDate.distantFuture() as! NSDate) -> SequenceOf<NSDate> {
return SequenceOf<NSDate> { _ -> GeneratorOf<NSDate> in
let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
calendar.timeZone = NSTimeZone(forSecondsFromGMT: 0)
return GeneratorOf<NSDate> {
if let nextDate = calendar.nextDateAfterDate(startDate, matchingComponents: matchingComponents, options: .MatchStrictly)
where nextDate.compare(endDate) != .OrderedDescending {
startDate = nextDate
@norio-nomura
norio-nomura / gist:b6c2ad88af55fea1f812
Last active August 29, 2015 14:18
Swiftで、NSObjectのサブクラスを定義するスコープとdynamicの有無によるKVC/KVO挙動の違い

NSObjectのサブクラスを定義するスコープとdynamicの有無によるKVC/KVO挙動の違い

  • ファイルスコープ
    • dynamicなし、KVC使える、KVO使えない。
    • dynamicあり、KVC/KVO使える。
  • funcスコープ
    • dynamicなし、KVC/KVO使えない。
    • dynamicあり、KVC/KVO使える。

ファイルスコープはNSObjectではなく、そのサブクラスをサブクラス化してるような挙動。

@norio-nomura
norio-nomura / gist:cb58213b9a78f74927d3
Created April 21, 2015 14:00
#Swift ジェネリックでは無いクラスのジェネリックなメソッドを、ジェネリックなサブクラスからオーバーライド出来ない罠にはまった。
class C {
func f<T>(v: T) -> String {
return "C(\(v))"
}
func callf() -> String{
return f("test")
}
}
@norio-nomura
norio-nomura / StringInterpolationConvertible.swift
Created April 21, 2015 23:55
#swift StringInterpolationConvertibleの挙動を確認
import Foundation
class C {}
// support own class without Printable
extension String {
init(stringInterpolationSegment expr: C) {
self.init(format: "C(%d)", ObjectIdentifier(expr).hashValue)
}
}
@norio-nomura
norio-nomura / PerformanceTests.swift
Last active August 29, 2015 14:21
Test recursion on Himotoki
import Foundation
import XCTest
import Himotoki
class PerformanceTests: XCTestCase {
func testRecursion() {
let JSON = deepNestedJSON(0)
self.measureBlock {
var t: Test? = decode(JSON!)