タコさんブログ

プログラミングメモと小言

swift

Swiftでちょっとだけモナド

Monads for functional programming - Philip Wadler セクション2のメモ。セクション2では、シンプルな評価器を構成することにより、モナドを導入し、修正に強い評価器を構成するのにモナドが使用できることが説明されている。 環境 Xcode 8.0 Swift 3.0 …

Swift AVAudioEngine でマイク入力を録音

AVAudioEngine を使用して、マイクからの入力を録音する。 AVAudioEngineの基本的な使い方は Swift AVAudioEngine の基本 - タコさんブログ を参照。 簡単のため、マイクアクセスの許可、オーディオセッションの管理などのハンドリングは考慮していない。 環…

Swift vDSP で 実FFT

C言語ではじめる音のプログラミング―サウンドエフェクトの信号処理 ページ33 で取り上げられているサイン波を vDSP(vectorized digital signal processing) ライブラリを使用して、FFTにより振幅スペクトルを求める(ここでは簡単のために窓関数を用いずにFFT…

Swift AVAudioEngine でサイン波を鳴らす

AVAudioEngine を使用して、440Hzのサイン波(ラ音)をPCMバッファーに設定し、鳴らす。 AVAudioEngineの基本的な使い方は Swift AVAudioEngine の基本 - タコさんブログ を参照。 環境 Xcode 7.3.1 Swift 2.2 準備 AVFoundation をインポートする import AV…

Swift AVAudioEngine の基本

環境 Xcode 7.3.1 Swift 2.2 準備 AVFoundation をインポートする。 import AVFoundation AVAudioEngine AVAudioEngine は 接続された audio node(AVAudioNode) のグループを定義する。 Audio node を使用してオーディオシグナルを生成、それらの処理、オー…

Swift で Audio Queue Services を使って再生する

Audio Queue Services Programming Guide - Playing Audio を参考にSwiftでAudio Queue Serviceを使用する。 環境 Xcode 7.3.1 Swift 2.2 準備 AudioToolbox をインポートする。 import AudioToolbox Audio Queue Service を使用する手順 状態・フォーマット…

デリゲートメソッドをRxSwift対応させる方法

この例ではUIWebViewDelegateメソッドをRxSwift対応させる。 環境 Xcode 7.3 Swift 2.2 準備 RxCocoa、RxSwiftをインポート。 import RxCocoa import RxSwift 今のところ以下のキャスト時に使用する関数はパブリックになっていないので、RxCocoaからコピーし…

Swift でヒマワリを描く

bitterharvest.hatenablog.com に触発されて、試しにSwiftで書いてみた。 準備 16進数カラーコードを UIColor に変換する必要があるので、 SwiftでHexColor(#34495eみたいなやつ) - Qiita を参考に、UIColorに簡易イニシャライザを追加する。 extension UICo…

Swift 型消去 (Type Erasure)

try! Swiftで発表のあった型消去の話。 この例ではSwiftにおける型消去技法を使用して、結城さんの 増補改訂版Java言語で学ぶデザインパターン入門 Iteratorパターンを愚直にSwiftで実装する。 前提知識 [増補改訂版Java言語で学ぶデザインパターン入門] Ite…

RxMoya (RxSwift + Moya)

Swift Moyaでモヤっとしているネットワークレイヤーを解決 - タコさんブログ のRx編。 RxMoyaProviderでは、MoyaProviderにコールバッククロージャを与える代わりに、オブザーバブルなレスポンスを使用する。 今回の例もiTunes Apple APIを使用して音楽のア…

RxSwift 入門 その7

RxSwift 入門 その6 - タコさんブログ の続き。 今回は、RxSwiftプレイグラウンドの Mathematical and Aggregate Operators 、Connectable Observable Operators の項。プレイグラウンドの内容としてはこれで最後。 Mathematical and Aggregate Operators …

RxSwift 入門 その6

RxSwift 入門 その5 - タコさんブログ の続き。 今回は、RxSwiftプレイグラウンドの Error Handling Operators 、Observable Utility Operators 、 Conditional and Boolean Operators の項。 Error Handling Operators この項では、Observableからのエラー…

RxSwift 入門 その5

Combination operators RxSwift 入門 その4 - タコさんブログ の続き。 今回は、RxSwiftプレイグラウンドの Combination operators の項。 この項では、単一のObservableを生成するために、多数のソースObservablesと連携するオペレータに関して説明してあ…

RxSwift 入門 その4

Filtering Observables RxSwift 入門 その3 - タコさんブログ の続き。 今回は、RxSwiftプレイグラウンドの Filtering Observables の項。 この項では、ソースObservableから選択的にアイテム(イベント)を送信するオペレータに関して説明してある。 以下…

RxSwift 入門 その3

Transforming Observables RxSwift 入門 その2 - タコさんブログの続き。 今回は、RxSwiftプレイグラウンドの Transforming Observables の項。 この項では、Observableから送信されるアイテム(イベント)を変換するオペレータについて説明してある。 変換…

RxSwift 入門 その2

RxSwift 入門 その1 - タコさんブログ の続き。 今回は、RxSwiftプレイグラウンドのSubjectsの項。 Subject は Observer 、また Observable の両方として機能し、Hotなオブザーバブルである。 Erik MeijerはSubjectを好んでいないようだ(Why Does E.Meijer …

RxSwift 入門 その1

とりあえずRxSwiftのプレイグラウンドのIntroductionに書いてあるサンプルを見ていく。Introductionには「RxSwiftを理解する鍵は、Observablesの概念を理解することである」と書いてあるとおり、主にObservableの生成について説明してある。 環境 Xcode 7.2 …

Swift Moyaでモヤっとしているネットワークレイヤーを解決

MoyaはAlamofireを直接さわることなく、ネットワークレイヤーを抽象化してくれるライブラリ。 イメージとしては、下の図のような感じ。 Moyaの特徴として、 コンパイル時に正しいAPIエンドポイントのチェック Associated Enumによりエンドポイントを明確にで…

CommonCryptoのSwift製ラッパー IDZSwiftCommonCrypto を使ってみる

IDZSwiftCommonCrypto を使ってみる IDZSwiftCommonCrypto は Appleの CommonCrypto のSwiftラッパーで、Realmで紹介されていたので、ちょっと試してみた。CryptoSwiftでAES暗号 (AES-256-CBC) - タコさんブログと同じように Swift側でIDZSwiftCommonCrypto…

Swift の AnyObject と Any メモ

AnyObject と Any についてのメモ。 AnyObject AnyObjectは 全てのクラス型のインスタンス を表すことができる型 Swiftのクラス、Objective-Cを継承したクラス、Objective-Cのクラスを扱うことができる。 class SwiftClass {} @objc class ObjCClass: NSObje…

Swift NSOperation と NSOperationQueue の基本的な使い方

NSOperationQueueクラスは dispatch_queue_t の高レベルAPIで、NSOpertionオブジェクトの実行を規制する。 NSOperationクラスは継承して使用することを目的とした抽象基底クラスになっているので、通常はNSOperationを継承したクラスを作成する。Foundation…

CryptoSwiftでAES暗号 (AES-256-CBC)

CryptoSwiftを使用して、 平文をSwift側で暗号化し、Ruby側で復号化する。 暗号方式はAES、鍵は256ビット長、暗号利用モードはCBC、パディング方式はPKCSを使用する。 環境 Xcode 7.1.1 Swift 2.1 準備 適当な256ビット長の鍵(文字列)を用意する。 BDC1711…

Swift NSTimer の基本的な使い方

環境 Xcode 7.3 (7.1) Swift 2.2 (2.1) タイマーの生成とRun Loopに登録を同時に行う場合 // targetObjectのObjective-Cで利用できるfunc update(timer: NSTimer)を1秒間隔で呼び出す // (または、Objective-Cクラスを継承したSwiftクラス) NSTimer.schedul…

開発効率を上げるかもしれないXcodeキーボードショートカット集

環境 xcode 7.0 左ペインの開閉 Cmd + 0 (ゼロ) 右ペインの開閉 Cmd + Opt + 0 (ゼロ) デバッグエリアの開閉 Cmd + Shift + Y Assistant Editorの開閉 Assitant Editorを開く Cmd + Opt + , 閉じる Cmd + Enter 検索に移動 カーソルも検索窓に移動している C…

Swfitのカリー化関数 (Curried Functions in Swift)

環境 Xcode 7.3 Swift 2.2 カリー化関数の構文 func 関数名 (引数) -> (引数) -> 戻り値の型 { return { (引数) -> 戻り値の型 ボディ } } カリー化関数の例 カリー化されていない関数 plus func plus(a: Int, b: Int) -> Int { return a + b } plusをカリー…

ストーリーボードにナビゲーションコントローラ・タブバーコントローラを素早く追加するTips

ナビゲーションコントローラ・タブバーコントローラをStoryboardに追加するとき 右側のUtilityペインの Object Library からドラッグ&ドロップするとナビゲーションコントローラ・タブバーコントローラ以外にもテンプレートのビューコントローラが付いてき…

swift の as as! as? オペレータ (Type Cast Operator) と is (Type Check Operator) とパターンマッチ

環境 swift 2.0 xcode 7 beta 5 as オペレータ Swfitコンパイラにより型変換・キャストが成功すると保証されるときに使用 アップキャスト リテラルの型を指定 class Animal {} class Dog: Animal {} let dog = Dog() let animal = dog as Animal // アップキ…

Swiftで作ったアプリをリリースしました!!

Swiftで作ったカジュアルゲームです! 土日を使って少しずつ作りました。 モチベーションが上がらないときはコワーキングスペースに行ってみたりして作業しましたが、 基本的には引きこもって作業。 Swift良いですね! Tap Speedokuhiro ohmutaゲーム無料

Swift 2.0 の indirect で2分探索木(Binary search tree)を試す

indirectが使用できる前はBoxクラスなんかを使って再帰的なenumデータ型 を実装していたみたいだが、indirectを使えばBoxクラス等を使わずにシンプルにList, Tree なんかを書ける。 環境 Xcode 7.0 beta 4 Swift 2.0 2分探索木 元ネタは すごいHaskellたのし…

Google Analytics for iOS with Swift

CocoaPodsを使用しないで、Google Analyticsを入れる方法 手動でGoogle Analyticsのスクリーン計測を行うまでをメモしておく。 環境 Xcode 7.1 (Xcode 6.4) Swift 2.1 (Swift 1.2) 準備 Google Developers Download the SDKからからzipをダウンロードする。…