Skip to content

Instantly share code, notes, and snippets.

var statusCode = 200
switch statusCode {
case 400..<500 :
print("400台ダヨ")
default:
print("知らないヨ")
}
var statusCode = 200
if 400..<500 ~= statusCode {
print("400台ダヨ")
} else {
print("知らないヨ")
}
@niwatako
niwatako / CodePiece.swift
Created December 1, 2015 03:02
Int なの、NSNotFoundなの? #CodePiece
class hoge {
var currentIndex: Int = NSNotFound
}
@niwatako
niwatako / CodePiece.swift
Created February 15, 2016 05:23
extension で親子別々の実装にしたい: Playgroundでは行けた( `・ω´・) 実際のコードでB().name がAになってしまうのだけど、型の認識のされ方の問題? #CodePiece
protocol SomeProtocol {
var name: String { get }
}
class A {}
class B: A {}
extension A: SomeProtocol {}
extension SomeProtocol where Self: A {
var name: String { return "My name is A" }
}
@niwatako
niwatako / CodePiece.swift
Created February 15, 2016 05:24
extension で親子別々の実装にしたい: Playgroundでは行けた( `・ω´・) #CodePiece
protocol SomeProtocol {
var name: String { get }
}
class A {}
class B: A {}
extension A: SomeProtocol {}
extension SomeProtocol where Self: A {
var name: String { return "My name is A" }
}
@niwatako
niwatako / CodePiece.swift
Created February 15, 2016 09:10
これはバグじゃないの!? swift の protocol extension による デフォルト実装と文脈による優先順位について #CodePiece
// A とそのサブクラス B が、"プロパティnameを持つ" SomeProtocolに準拠することを宣言。
class A {}
class B: A {}
protocol SomeProtocol { var whatYourName: Void { get } }
extension A: SomeProtocol {}
// Aにnameのデフォルト実装を用意
extension SomeProtocol where Self: A {
var whatYourName: Void { print("My name is A") }
}
// BはAを継承していますが、更にデフォルト実装を上書きします
@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" }
}
@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
Created March 12, 2016 04:50
最初だけ初期化する、のではなく毎回新しく作り直して取得したいときはこうですね 、計算型プロパティ(Computed Properties) #cocoa_kansai #CodePiece
class File {
var content: Content {
return Content(path:self.path)
}
}
@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も循環参照を生む。