Skip to content

Instantly share code, notes, and snippets.

@externvoid
externvoid / foo.txt
Last active May 25, 2016 01:10
コレクションオブジェクト(編集中)
⭕️forEach, for-inに応答できるオブジェクトを生成できるクラスを作る。
2つの文はループ枚にnext()を呼び出す。似たような関数anyGeneratorがあってその関数はGenerator型(closureを返すので、next()を呼び出すのと似ている)を返す。
1️⃣SequenceTypeに準拠させる
2️⃣generateメソッドを定義(SequenceTypeが要求)
3️⃣戻り値はGeneratorTypeに準拠させる
4️⃣戻り値のクラスにはnext()メソッドを用意する。
let sine = SineClass() //ここでgenerate()は呼ばれないfor or forEachで一回だけ呼ばれる
💠使い方1
for x in sine {
@externvoid
externvoid / cluster.swift
Last active May 25, 2016 01:05
クラスクラスターの例、ネットで拾ったのでタブが俺の流儀と異なる
class Vehicle
{
var wheels: Int? {
get {
return nil
}
}
class func vehicleFactory(wheels:Int) -> Vehicle
{
@externvoid
externvoid / dateformatter.swift
Created May 18, 2016 06:43
日付リテラルっぽいのを使ってみる。
import Foundation
var dateFmt: NSDateFormatter = NSDateFormatter()
dateFmt.dateFormat = "yyyy/MM/dd HH:mm:ss"
let date1 = dateFmt.dateFromString("2014/03/18 00:00:00")!
let date2: NSDate = dateFmt.dateFromString("2014/03/19 00:00:00")!
var order = date1.compare(date2)
print(order)
print(order == NSComparisonResult.OrderedDescending)
@externvoid
externvoid / displayEnum.swift
Created May 18, 2016 06:37
列挙enumの中身を表示する。rawValueではその意味が判らんので!ただし、このソースの意味がよく判らん。要解読。
import Foundation
func iterateEnum<T: Hashable>(_: T.Type) -> AnyGenerator<T> {
var cast: (Int -> T)! // reference to clousure
//print(($0).dynamicType)
// what is $0 ?, Int, 0, 1, 2, 3, 4 for nil
switch sizeof(T) {
case 0: return anyGenerator(GeneratorOfOne(unsafeBitCast((), T.self)))
case 1: cast = { unsafeBitCast(UInt8(truncatingBitPattern: $0), T.self) }
// print($0.dynamicType);print($0)
@externvoid
externvoid / compare.swift
Last active May 25, 2016 01:23
compareメソッドの使い方が良く判らん⁉️▶️判った、昇順降順を判断して返してくれるって事だ。
var ar2:Array<NSString> = ["aaa", "bbb", "abc",]
var strings:NSMutableArray = NSMutableArray(array: ar2)
print(strings)
strings.sortUsingComparator( {
return $1.compare($0 as String)
} )
//error: 'AnyObject' is not convertible to 'String'; did you mean to use 'as!' to force downcast?
// return $1.compare($0 as String)
@externvoid
externvoid / usingClosure.swift
Created May 18, 2016 01:40
クロージャーの定義の仕方、3通り。型推論が働くので、引数リストは不要なのかも。[unowned self]といった、selfのキャプチャはclass, struct内でのみ使用可能。
var a = 0
var b = 0
let closure0 = { [a] (b:Int)->Void in
// capture list, argument listの同時記述が出来る。
print(a, b)
}
a = -1
b = 99
@externvoid
externvoid / unowned.swift
Last active May 23, 2016 07:20
swiftのキャプチャ機能[ ]とキャプチャ変数をunowned修飾する事で、循環参照を回避する。closure gからはselfを参照、MyClassのインスタンス(self)はmethod()を経由してclosure gを参照する。
class MyClass {
var x: Int = 10
func method() {
print("x = \(x)")
}
var g:()->() = {
let y = self.x
print(__LINE__,"行", String(self.dynamicType), __FUNCTION__)
print("y = \(y)")
}
@externvoid
externvoid / foo.swift
Created January 7, 2016 08:02
nilを返すかもしれないメソッドから値を受け取ってnon-optionalへ変換
nilを返すかもしれないメソッドから値を受け取る。
例:objectForKeyはAnyObject?を返す!!
[String: Int]?を[String: Int]へキャストする。
import Foundation
var obj: [String: Int]? = ["hp": 0]
print(obj)
var obj3: [String: Int] = obj! as [String: Int] ?? [String: Int]()
@externvoid
externvoid / nil_expected.swift
Created December 21, 2015 07:53
nilが返るかもしれないメソッドの取り扱い
// nilが返るかもしれないメソッドの取り扱い
//let obj6 = NSUserDefaults.standardUserDefaults().objectForKey("user data")
var obj6: AnyObject? = nil
print(obj6)
var obj5 = obj6 as? [String: Int] ?? [String: Int]()
//var obj5: [String: Int] = obj! as [String: Int] ?? [String: Int]()
obj5["hp"] = 3
print(obj5) // ["hp": 3]
print(obj5.dynamicType) // Dictionary<String, Int>
class Bar {
let someVal = 5
lazy var g:() -> String = { [unowned self] in
// lazy: 次のエラー対策:error: use of unresolved identifier 'self'
return String(self.someVal)
}
}
var bar = Bar()
print(bar.g()) // string "5"