swift
タイトルそのままです。 struct Hoge { var a: Int32 var b: Int32 } MemoryLayout<Hoge>.size // 8</hoge>
ググると引っかかるのか今だにswift2のドキュメントなので、swift3用のメモ let a = [1, 2, 3] let b = a.map { Array(repeating: $0, count: $0) } print(b) // [[1], [2, 2], [3, 3, 3]] let c = [1, 2, 3] let d = c.flatMap { Array(repeating: $0, coun…
swiftのソースでmapとflatMapというメソッドがよく出てくるのだが、このメソッド名からは想像できない動作をするのでメモしておく。 (メソッド名変えてくんないかな。。) Optionalの定義を見ると次のようになっている。 public enum Optional<Wrapped> : ExpressibleB</wrapped>…
swiftでこんなソースが出てきた。-> が2つ連続しているが意味がすぐには分からない。 func multi(val:Int) -> (val:Int) -> Int { return { a_val in return a_val * val } } 省略されている()を書くとこうなる。 func multi(val:Int) -> ((val:Int) -> Int)…
swiftのComparableプロトコルはEquatableプロトコルを継承しているので、Comparableと同じことがしたいがEquatableは実装したくないという時に使えない。 その場合、Comparableに相当するプロトコルだけを自分で実装すれば良い。 public protocol Comparable…
swift3で作ったiOSアプリでサーバーへHTTPリクエストを複数回投げる場合に、 普通に作ると、正常ケース、異常ケースの処理があちこちにばらけて、ソースが汚くなります。 PromiseKitを使ったところ、ソースが短く、処理も追いやすくて素晴らしかったので、メ…
最近、素数の本を読んで面白かったので、 フェルマーの素数定理 任意のp:素数 n:自然数に対して、np - n を p で割った余りは 0 である。 をswiftで数値計算でInt64の範囲でいいから確認してみたい欲求に駆られ、実装してみました。 import Foundation infix…
swift3ではC言語形式のループが廃止されます。 swift2.2の現時点では、deprecatedになっています。 書き換え方がわかりずらいのでメモ print("case to") for i in 0.stride(to:2, by:1) { print(i) } for i in 0..<2 { print(i) } print("case through") for…
Objective-Cでは以下のように書いていましたが #pragma mark - UICollectionViewDelegate swiftではこう書きます。 // MARK: - UICollectionViewDelegate もしくは /* * MARK: - UICollectionViewDelegate */
objc_overrelease_during_dealloc_error というエラーでクラッシュしていたんだが、 takeRetainedValue() を takeUnretainedValue() に変えたら落ちなくなった。 retainしすぎていたということか。 swiftでのUnmagedはイマイチ理解できていない。
3/2-4 渋谷マークシティにて行われたtry!swiftカンファレンス http://www.tryswiftconf.com に参加してきましたので簡単な感想です。 スピーカー33名(日本人2割)、参加者約500名(日本人8割) という規模のswift言語やApple関連ソフトウェアに関する コミュニ…
Type Aliases typealias AudioSample = UInt16 プロトコルのAssociated Typeには特定のプロトコルに準拠することという条件を付けられる。 protocol PBProtocol { typealias PBError: IntegerType } class PBClass: PBProtocol { typealias PBError = Int } …
enum CompassPoint { case North case South case East case West } var directionToHead = CompassPoint.West directionToHead = .East directionToHeadは一旦、varで代入されて型が固定されると、次の行以降はdot表現が使える。 Associated Values enum Ba…
swiftで定義した構造体、列挙体はObjective-Cでは使えないようだ。 使えないもののリストはこちら。 Generics Tuples Enumerations defined in Swift without Int raw value type Structures defined in Swift Top-level functions defined in Swift Global …
struct Stack<Element> { var items = [Element]() mutating func push(item: Element) { items.append(item) } mutating func pop() -> Element { return items.removeLast() } } このジェネリック構造体を拡張してみる。 ジェネリック型を拡張する際は、extensionの</element>…
swiftを久々に触ったら、クロージャの文法を完全に忘れていたので、メモしておく。 Closure Expression Syntax クロージャはこの形をしている。 { (parameters) -> return type in statements } 例えば、このように使う。 let names = ["Chris", "Alex", "Ew…
なぜか、swiftをC++11に移植しているのですが、思ったより楽でした。 C++11の機能はまだ慣れていないので、メモを残しておきます。 1) クラスメンバの宣言時初期化 class Book { Book() {} float price = 10.0; }; 2) swiftクラスのinitが2つあったとして、…
pure vimでswift自動補完するvim pluginを作った方がいらっしゃるので紹介しておきます。 動作確認はOSX 10.10.5 (Yosemite) Xcode 7.2で行いました。 github.com このプラグイン自体はbundleなどでインストールするだけですが、 以下のsourcekittendaemonと…
swiftでCoreAudioを使ってみます。 ラ(440Hz)のサイン波の音を再生するサンプルです。 import Foundation import AudioUnit import AudioToolbox import AVFoundation class MyAudioPlayer { var _audiounit: AudioUnit? = nil var _x: Float = 0 let _sampl…
swiftの好きなところ嫌いなところです。 比較対象はObjectiveCなので、ObjectiveCにある機能やC++にある機能は除きます。 swiftの好きなところ第3位 未初期化の変数があるとコンパイルが通らない。 よくある言語実装のように、変数があったらデフォルト値で…
この記事では、XVimに組み込まれたswift関連機能の説明をします。 XVimとはXcodeをvimキーバインドにするXcodeプラグインです。 インストール方法や使い方はこちらを参照して下さい。 XVimProject/XVim · GitHub この機能をXVimに取り入れたモチベーションの…
分かったこと。 1. swiftでC言語の構造体を別変数へ代入すると全ての要素が代入される。つまりC言語と同じ動作をする。 2. C言語の構造体内のポインタにはC言語側で入れたアドレス値が入っていてswift側でそのまま、UnsafeMutablePointerとして扱える。 3. C…
Xcodeに付属するInstrumentsで遅い処理を特定する手順です。 Instrumentsの中のTimeProfilerを使います。 Profileを実行します。 TimeProfilerを選択します。 赤いボタンを押すと実行が始まります。 スレッド毎にかかった時間(milliseconds)と比率(%)が表示…
4096 * 10,000 個のfloatに特定の演算をしたときの時間。 C index指定 115791 us C ポインタ指定 116161 us swift 5469 us swift vDSP 9235 us AccelarateフレームワークがなぜかPure Swiftに負けてる。
構造体も構造体ポインタもどちらも渡せるが、構造体ポインタのときはmemoryとたくさん書くことになる。ソース可読性を優先すると構造体の方がよさそう。速度については構造体ポインタの方が若干速いようだ。 swift1.2 Optimization Level : Fasttest [-O] 1,…
stackoverflow.com あるクラスをobjcからswiftへ移行するなら、継承関係にあるクラスはすべて、いちどきにswiftに書き換えないといけない。
Objective-CでNS_ENUM定義がswiftでどのように見えるか実験した。 enum.h typedef NS_ENUM(NSUInteger, Element){ ElementFire, ElementWater, }; typedef NS_ENUM(NSUInteger, FRUIT){ FRUIT_APPLE_1, FRUIT_ORANGE_2, }; typedef NS_ENUM(NSUInteger, ANIM…
勘違いしていたが、ObjC側からswiftソース上で呼び出せるのは、クラス(のメソッド)、プロトコル、整数型のenumのみだった。 swift上で書いたグローバル関数やグローバル変数は呼び出せないのだった。逆は可能。 つまり、ObjCのクラスはswiftへ移行できるが整…
struct Array<T> : MutableCollectionType, Sliceable, _DestructorSafeContainer { } extension Array { func withUnsafeBufferPointer<R>(body: @noescape (UnsafeBufferPointer<T>) -> R) -> R mutating func withUnsafeMutableBufferPointer<R>(body: @noescape (ino</r></t></r></t>…
Reflectableプロトコルとは、型情報を扱うためのものと考えて良い。 protocol Reflectable { func getMirror() -> MirrorType } protocol MirrorType { var value: Any { get } var valueType: Any.Type { get } var objectIdentifier: ObjectIdentifier? { …