タコさんブログ

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

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をダウンロードする。…

SwiftのRangeからArrayを取得する方法

環境 swift 1.2 方法その1 mapを使う let range = Range(start: 0, end: 10) let array = range.map{$0} println(array) // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 方法その2 Array#initから生成する let range = Range(start: 0, end: 10) let array = Array…

カスタム画面遷移でモーダル表示をしたとき、dismissしたら画面が無くなっている!?

環境 swift 1.2 target iOS 8 Xcode 6.3 iPhone 6 Simulator (実機では試していない) 現象 プログラムの内容:カスタム画面遷移でモーダル画面を表示させて、モーダル画面内のボタンが押されたら dismissViewControllerAnimated でカスタム画面遷移でモーダ…

Alamofireを手動で入れる(メモ)

AlamofireのManuallyに書いてある通り、git gubmoduleを使ってAlamofireを使用するやり方。 プロジェクト作成 Alamofireを使用するプロジェクトを作成する。このときSource ControlのCreate Git repositoryにチェックを入れておく。 Git submodule 作成した…

そうですか〜Carthageさん

Carthage BUILD FAILED 今流行り(?)のCarthageを使ってみようと思って、Cartfileを用意したあとにcarthage updateをしたら、下のエラーがでる。 ** BUILD FAILED ** The following build commands failed: Check dependencies (1 failure) xcodebuildのロ…

Swift Closure クロージャ記法 いろいろ

環境 Swift 1.2 Swiftのクロージャ構文 Swiftでのクロージャは以下のように書く { (仮引数) -> (戻り値の型) in クロージャ Body } Swiftのクロージャ記法いろいろ 前提 以下のIntの配列とsortedを例として使用する。 let numbers: Array<Int> = [5, 4, 9, 10, 6,</int>…

UIScrollView, UIWebView等のContent Insetを調整する

全画面にUIScrollView(UIWebView)を配置すると、ステータスバーを表示している場合、下の図のように、ステータスバーの下にコンテンツが重なって表示されてしまう。 このとき、スクロールヴューの余白、スクロールバーの開始位置を以下のように調整する必…

Auto LayoutのConstraintをアニメーションさせる

Auto Layoutを使用しているときに制約をアニメーションさせる方法 今回やるアニメーションは、ボタンを押したら下の位置にある緑色のヴュー(画面外)が 表示されていないとき、ヴューが中央まで表示される 表示されているとき、ヴューが下の位置に戻る レイ…

StoryboardのUnwind SegueにIdentifierをつける

Unwind SegueにIdentifierをつけれることを知らなかったので、メモしておきます。 画面遷移 FirstViewControllerにModalボタンを配置して、押されたら、モーダル表示でナビゲーションコントローラに埋め込んだSecondViewControllerの画面を表示。SecondViewC…

Auto Layout + Superview's Ratio + Swift code

AutoLayoutで比を使う SwiftのコードでUIView(aView)を生成して、以下の制約をコードでつけます。 ViewController.view の width : aView の width = 3 : 1 ViewController.view の height : aView の height = 4 : 1 どんなディスプレイサイズになっても、…

The Swift Programming LanguageのFunctionsメモ

前回の続き。Constants and Variable Parametersあたりから。 関数のパラメータ 関数のパラメータはデフォルトで定数パラメータになる。つまり、パラメータの前に何も書かなければではletが自動でつく。明示的に関数を書くと下のようになる。 func someFunct…

Swift Functions メモ

The Swift Programming LanguageのFunctionsセクションのメモ。 関数の定義 Swiftの関数はfuncキーワードから始まり、次のように書く。 func function_name(parameters) -> return_type { // 関数ボディ return return_value } 文字列personNameを受け取り"H…