Skip to content

Instantly share code, notes, and snippets.

@niwatako
niwatako / CodePiece.m
Created June 16, 2016 05:28
@energy_gorilla WKWebViewのPDFプリント、これでどうでしょう #CodePiece
- (void)print {
// self.wkWebView はプロジェクト内でのWKWebViewインスタンスに差し替えてください。
// PrintInfo を作る
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = self.wkWebView.title;
printInfo.orientation = UIPrintInfoOrientationPortrait;
printInfo.duplex = UIPrintInfoDuplexLongEdge;
// PrintInteractionController を作る
@niwatako
niwatako / CodePiece.js
Created May 14, 2016 05:36
A<B>を継承したABをExtensionしてプロトコルに準拠させることは出来たっぽい #CodePiece
protocol ProtocolA {}
class A<T> {}
class B {}
class C {}
class AB: A<B>{}
extension AB: ProtocolA{}
assert(AB() is ProtocolA)
assert(!(A<C>() is ProtocolA))
@niwatako
niwatako / CodePiece.js
Created May 14, 2016 05:26
条件を指定した protocol 継承手段はあるのか #CodePiece
protocol ProtocolA {}
class A<T> {}
class B {}
class C {}
extension A: ProtocolA where T: ClassB {} // extension of type 'A' with constraints cannot have an inheritance clause
assert(A<B>() is ProtocolA)
assert(!(A<C>() is ProtocolA))
@niwatako
niwatako / CodePiece.js
Created May 11, 2016 04:47
デフォルト引数があるstructのイニシャライザとプロトコルとGenericsが混ざると面倒なの見つけた(・ัω・ั) #CodePiece
struct Hoge {
let name: String
let age: Int
init(name: String, age: Int = 0 ) {
self.name = name
self.age = age
}
}
protocol NameInitializable {
@niwatako
niwatako / CodePiece.js
Created May 8, 2016 05:22
ES6では最後の評価を保持し続けないようになった #CodePiece #kyotojs
/* 最後の評価を保持しないようになった */
eval( '42; if (true) {}' ); // ES5 => 42
eval( '42; if (true) {}' ); // ES6 => undefined
@niwatako
niwatako / CodePiece.swift
Last active March 28, 2016 02:35
Dictionary と nil, Optional Swift の Dictionary で nil を扱うhttps://ez-net.jp/article/1C/t1D5_SZN/hZ0evGOf9-uc/ #CodePiece
// Dictionary と nil
// nil を代入すると"hoge"キーは消える
var dic: [String: Int] = ["hoge": 1, "foo": 2]
dic["hoge"] = nil
dic // ["foo": 2]
// Valueの型を Int? にしても、nil を代入すると"hoge"キーは消える
var dic2: [String: Int?] = ["hoge": 1, "foo": 2]
dic2["hoge"] = nil
@niwatako
niwatako / CodePiece.swift
Created March 12, 2016 05:09
inline lazy var #catchswift #cocoa_kansai #CodePiece
class MyClass {
lazy var calculate1: () -> Int = self.calculate
lazy var calculate2: () -> Int = {
self.calculate()
}()
}
// calculate1 は 型 () -> Int より、calculate2と同じ、クロージャーが代入される。見た目はselfをキャプチャしていないかのように見えてしまうけど、calculate2がselfに循環参照を起こすのと同じように、calculate1も循環参照を生む。
@niwatako
niwatako / CodePiece.swift
Created March 12, 2016 04:50
最初だけ初期化する、のではなく毎回新しく作り直して取得したいときはこうですね 、計算型プロパティ(Computed Properties) #cocoa_kansai #CodePiece
class File {
var content: Content {
return Content(path:self.path)
}
}
@niwatako
niwatako / Example.swift
Created March 8, 2016 16:01
あるProtocolに定義されているComputed Propertyの値をそのProtocolに準拠したクラスのextension毎に違う値にする...?
protocol PhoneType{
var number:String { get }
func callTo(number:String)
}
extension PhoneType {
func callTo(number:String) {
print("Call to \(number) from \(self.number)")
}
@niwatako
niwatako / CodePiece.swift
Last active April 5, 2023 21:28
【続編】もしも `extension PROTOCOL where Self: T` を親子のクラスにそれぞれ適用したら採用される実装はどっち #CodePiece
// A とそのサブクラス B が、"プロパティnameを持つ" SomeProtocolに準拠することを宣言。
class A {}
class B: A {}
protocol SomeProtocol { var name: String { get } }
extension A: SomeProtocol {}
// Aにnameのデフォルト実装を用意
extension SomeProtocol where Self: A {
var name: String { return "My name is A" }
}