Skip to content

Instantly share code, notes, and snippets.

@takasek
takasek / CodingKeyMapper.swift
Last active June 19, 2017 22:15
CodingKeyのマッピングを動的に切り替える ref: http://qiita.com/takasek/items/94a8c3ccd7843c84f7fb
/// CodingKeyのマッピングを動的に切り替える
protocol CodingKeyMapper {
static var mapper: [String: S<Self>.CodingKeys] { get }
}
extension CodingKeyMapper {
static var mapper: [String: S<Self>.CodingKeys] { return [:] }
static func key(_ stringValue: String) -> S<Self>.CodingKeys? {
return mapper[stringValue]
}
@takasek
takasek / HashablePerformanceTests.swift
Last active June 19, 2017 10:38
potatotips #41 (iOS/Android開発Tips共有会) - connpass https://potatotips.connpass.com/event/57585/ で使用したテストコードです。
//
// HashablePerformanceTests.swift
// HashableExampleTests
//
// Created by takasek on 2017/06/18.
// Copyright © 2017年 takasek. All rights reserved.
//
import XCTest
@takasek
takasek / CSVDecoder.swift
Last active September 7, 2018 23:12
Swift4のCodableに対応した、独自のDecoder(CSVDecoder)を実装してみよう ref: http://qiita.com/takasek/items/8bcb2f9169fbe2a0593e
import Foundation
//===----------------------------------------------------------------------===//
// CSV Decoder
//===----------------------------------------------------------------------===//
/// `CSVDecoder` facilitates the decoding of CSV into semantic `Decodable` types.
/// structでなくclassなのは、JSONDecoderやPlistDecoderの場合にはoptionを適宜切り替えつつdecodeしていけるようにだと思う
/// 実際の Decoder プロトコルへの適合は、fileprivateな _CSVRowDecoder 型を通して行う。
open class CSVDecoder {
@takasek
takasek / CodePiece.swift
Created June 9, 2017 02:58
JSONDecorderは、プロパティdateDecodingStrategyをsetすると、dateのパース方法を色々カスタマイズできるみたい #CodePiece
import Foundation
struct S1: Codable {
let dateFromTimeInterval: Date
}
struct S2: Codable {
let dateFromISO8601: Date
}
@takasek
takasek / CodePiece.swift
Created June 9, 2017 00:15
さらに削ってみた #CodePiece
import Foundation
struct User: Codable {
struct Address: Codable {
let street: String
let city: String
let state: String
}
let name: String
let address: Address
@takasek
takasek / CodePiece.swift
Created June 8, 2017 23:46
Codableで遊んだ。 http://qiita.com/rizumita/items/9a9afa67ab803964d719 をベースに。 #CodePiece
import Foundation
struct User: Codable {
struct Address: Codable {
let street: String
let city: String
let state: String
private enum AddressCodingKeys: CodingKey {
case street
@takasek
takasek / CodePiece.swift
Created May 24, 2017 06:27
hash値ってそのまま集合のkeyとして使われるんだと思ってた…! 実際はあくまで検索を効率化するための第一キーで、同一性をあらわすものではなかったのね…! #CodePiece
struct Hoge: Equatable, Hashable {
let a: Int
let b: Int
static func == (lhs: Hoge, rhs: Hoge) -> Bool {
return lhs.a == rhs.a
&& lhs.b == rhs.b
}
var hashValue: Int {
return a
}
@takasek
takasek / CodePiece.swift
Created May 13, 2017 12:09
さっき書いたPhantom Typeのサンプルコード、gistにもあげとこ #CodePiece
class Propotion {}
final class 🐕: Propotion {}
final class 🐶: Propotion {}
// 👆class継承使ってるけど、
// Swift3.1.1以降は👇でもよさそう?
//protocol Propotion {}
//struct 🐕: Propotion {}
//struct 🐶: Propotion {}
@takasek
takasek / CodePiece.swift
Created October 4, 2016 09:40
やっぱり、他の数値型と違って、Boolをas NSNumberしたときだけは、同値は同一のclassインスタンスになるようだ #CodePiece
let num = 1 as NSNumber
num === num
//true
(num as Int as NSNumber) === (num as Int as NSNumber)
//false
(num as UInt as NSNumber) === (num as UInt as NSNumber)
//false
@takasek
takasek / CodePiece.swift
Created October 3, 2016 13:22
as AnyObject, as Anyによるboxingの挙動について調べてみた #CodePiece
import Foundation
do {
let value = 1
let a = value as AnyObject
let b = value as AnyObject
a === b //false
//値型は、as AnyObjectのタイミングでclassインスタンスにboxingされる
//as AnyObjectのタイミングが異なれば、別のclassインスタンスとしてboxingされる