読了: 約 8 分

iOSアプリ開発のためにSwiftをしようしている初学者に向けての記事を追記しながら書いていきます。
Swiftやってみての所感は、とにかく検索コストが高すぎる。
なので、エラーリンクや、開発環境の設定、オススメライブラリなど定期的に諸々メモしていく場所を創っておきます。

概要

環境設定

Xcode6.3
Swift1.2

Swiftの肝であるoptional value

nil を変数に入れられないので? !で特別な変数であることを知らせる

optional valueは変数の後につける
var str:string? = nil
var str:string? = “av”

var ansInt:Int = 0
var opInt:Int? = nil

if let tmpInt = opInt
// 変数名がnilじゃないとき
ansInt = opInt!
else
// 変数名がnilのとき
ansInt = -1

var opInt:Int? = nil
var ansInt:Int = opInt ?? -1

classプロトコル周り

class クラス名: 親クラス、プロトコル名、プロトコル名
プロトコル=約束事をまとめたもの

– タイマーを止める

timer. invalidate()

写真アプリの開発したいときの考え方

AV Foundationはカメラロールなどをカスタマイズしたい複雑なUI設計のときに向いている

・AV Foundationをimportしてカメラが対応しているかチェック
・AV CaptureSession = 撮影した写真をsessionに保存
AVCaptureDevice = デバイスの有無判定
AVCaptureStillImageOutput = 現在のimageをoutputする

▽全画面表示
スクリーンサイズ取得

CGRectの使い方

CGRectを元にカスタマイズCGRectを生成 – Qiita

1. 値の再代入禁止について

Objective-Cから関数型のSwiftに変わり、Optional型ではない変数の再代入が禁止されました。
例えばStructで宣言した変数も基本的に再代入は禁止です。(ただし、mutating…

▽参考記事

【iOS】【Swift】写真をその場で撮ったり選択したりする – Qiita
こんな感じ

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerD…

▽Webviewしたいとき

iOS – Swift で WebViewアプリを作ってみた – kzy52’s blog
Swift で WebView を使ってWebページを表示するだけのアプリを作ってみます。 初めて実装する人でもわかるよう、細かくコメント入れています。 是非、お試しください。 テンプレートは Single View Application にします。 Webページを表示する UIWebViewクラスを使って WebView を実装していきます。 WebView を実装するには他にも WKWebView というクラスがあります。 class ViewController: UIViewController { var webView: UIWebView? var targetURL = “h…
 iOS - Swift で WebViewアプリを作ってみた - kzy52's blog

▽モーダルの切り替え
http://tech.eversense.co.jp/159

▽dismissViewControllerAnimatedがエラーを起こした場合
http://qiita.com/keisukeohta/items/4c7b001379212f5eb28c

▽神のドキュメントサイト

Todoアプリ開発のときの考え方

– segue 画面遷移を作るために使用
viewcontrollerを2つ以上用意して、classでつなぐ

Swiftでセグエを利用した画面遷移 – Qiita

概要

画面遷移はアプリとして基本的な動作なのに、頭の中でちょっと整理できていないので覚え書き。

ファイル構成

まずは、ファイル構成。UIViewControllerを継承した FirstViewController Sec…

– tableview

– 入力のバリデーション

NSUserdefaultsを使用してデータを保存する

NSManagedObjectContext周りでエラーが起きてわからない
CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null)

SwiftでNSManagedObjectのサブクラスを作成してフェッチする方法(Beta5で) – Qiita

モデルでのクラス名の設定

xcdatamodeldでエンティティのクラス名にモジュール名のプレフィックスを付ける必要があります。アプリ名がMyApp、Entity名がPersonだとするとクラス名はMyApp.Personと設定…

coredata

SwiftでCoreDataを使うときのメモ – Qiita

いろいろ記述に迷ったのでメモメモ

// CoreDataの取得
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegat…

dataの永続化

ワンダープラネット株式会社(WonderPlanet Inc.)
エンターテインメントサービス事業を展開するワンダープラネット株式会社(本社:名古屋市)の公式ウェブサイトです。企業情報、事業内容、ニュースリリース、採用情報などをご覧いただけます。
ワンダープラネット株式会社(WonderPlanet Inc.)

NSUserDefaults を使ってのデータ永続化について

NSUserDefaultを利用した中年データ永続保存 – Swiftサラリーマン
端末に保存されたデータを永続化します。アプリを閉じてもこのデータは保持される開発には不可欠なクラス。永続化させるにはNSUserDefault以外にもファイルに書き込んで保存したり、DBに追加したりと 多彩な方法がありますが、この記事は「NSUserDefault」にフォーカスします。保存できる最大サイズは設定されておらず端末依存。どれだけでも保存できますが、端末によってアプリ毎の保存領域サイズが違う様で微妙ですが、 1000〜10000個とか保存しても動作するようですので、保存数に関してはあまり気にしないでアプリの総合的にどの部分にメモリを多く利用するかを調整する必要はあるかもしれません。

Todoアプリの基本的な設計

最初にAPI叩く、その後、jsonで取得して、collectionに保存
collectionを呼び出して、タップした記事のURLを取得
webview.loadRequestにrequest urlを投げる

非同期処理
コレクション作成 – データ保持用

iOS/Android対応 Boltsを使って非同期処理を統一的に書く – Qiita

Bolts Framework とは

昨年Facebookに買収されて話題になったParseチームが開発しているiOS/Androidフレームワーク。
Bolts自体はParseとは独立しているため、ParseのBaaSを使って…

// tableviewのcellの調整

UITableViewのセルの高さを動的に計算するSelf-Sizing Cellsを試してみた(iOS8, Swift)
iOS,Swift,Objective-C,Xcode,Cocoa Touch,iPhone,Mac,Macbook,OS X等に関するブログです。
UITableViewのセルの高さを動的に計算するSelf-Sizing Cellsを試してみた(iOS8, Swift)

constrainsの設定周り
UILableのlineを0に設定しておかないと、1行になってしまうので注意が必要

Coredataを使ってTodoアプリを開発したいときの考え方

coredataによるtodoアプリ開発

json ライブラリを使った newsアプリ開発

[!] Pods written in Swift can only be integrated as frameworks; this feature is still in beta. Add `use_frameworks!` to your Podfile or target to opt into using it

use_frameworks!をpodfileに追記しないとエラーが起きる

historynavigationのviewcontroller

GitHub – marty-suzuki/SAHistoryNavigationViewController: SAHistoryNavigationViewController realizes iOS task manager like UI in UINavigationContoller. Support 3D Touch!
SAHistoryNavigationViewController realizes iOS task manager like UI in UINavigationContoller. Support 3D Touch! – GitHub – marty-suzuki/SAHistoryNavigationViewController: SAHistoryNavigationViewCon…
GitHub - marty-suzuki/SAHistoryNavigationViewController: SAHistoryNavigationViewController realizes iOS task manager like UI in UINavigationContoller. Support 3D Touch!

ライブラリがない問題
link binary with libraries にlibpods.a設定

libPods.aのビルド手順 – Qiita
「pod install」を実行後作成されたxcworkspaceファイルを開いたところ、libPods.aが作成されていなかったため、備忘録ですが libPods.a のビルド手順に関するメモです。

ビルド手順

以下、Xcod…

ライブラリの追加方法

Xcodeでフレームワークを追加する方法【初心者向け】
Xcodeで【フレームワーク】を追加する方法を初心者向けに解説した記事です。予め用意されているフレームワークを使えば、広告などもアプリ上で簡単に表示することが可能です。フレームワークの追加方法、確認方法をまずはチェック。

プッシュとか会員登録周り

Facebookが買収したParseを使用して、開発するのが効率的。
Twitter,Facebook認証なども備えられているので、非常に便利でサーバーサイドの知識が少なくても
割と工数をかけずに開発可能

parse

Parse Platform
The open source GitHub page for the Parse platform.
Parse Platform
Parse Platform
The open source GitHub page for the Parse platform.
Parse Platform

//////

parseのinstall

Parseのpodは 一番公式っぽい “Parse” を使おう | DevelopersIO
Parse、便利ですね! ユーザ認証から、データを保存する用途まで、様々に活用できます。 弊社でもシリーズMBaaS な Parse で遊ぼうで過去に特集を組みました。 iOSで使うには、ParseのSDKをダウンロード …
Parseのpodは 一番公式っぽい “Parse” を使おう | DevelopersIO

boltsのエラーっぽいけどfacebook sdkが更新されてからだめらしい
extern NSString *const BFTaskMultipleExceptionsException;

http://hmcreation.net/?p=169

ネットワーク系のログとかその辺を監視したりする
pod ‘AFNetworking’
pod ‘AFNetworkActivityLogger’

JSONを扱うときの資料

swiftyjsonのチュートリアルとか基本的な使い方・公式サイト

Swiftで面倒なJSONの取り扱いを10倍便利にするSwiftyJSON – Qiita
SwiftyJSON
https://github.com/lingoer/SwiftyJSON

上記を読んでしまえば一瞬なんですが、一応使い方をこちらにもそのまま書いておきます。

JSONの取り扱いって面倒ですよね?

[

GitHub – SwiftyJSON/SwiftyJSON: The better way to deal with JSON data in Swift.
The better way to deal with JSON data in Swift. Contribute to SwiftyJSON/SwiftyJSON development by creating an account on GitHub.
GitHub - SwiftyJSON/SwiftyJSON: The better way to deal with JSON data in Swift.

// classメソッド

classをインスタンス化しなくても、直接呼び出せるメソッドのこと
プロパティを操作しないメソッドに使用する

// as ~ down キャスティング、 upキャスティング
継承元の型を調べないとエラーが起きる

初学者はライブラリ入れるときにめちゃくちゃ困った

bridgingheader fileの設定まわり
objective-cで作成されたライブラリを入れたいときに記述する必要がある。

Swift:CocoaPodsでObjective-Cのライブラリをインストールする方法 – Qiita
Xcodeでプロジェクトを作成する。
http://kazuy.net/?p=266 を参考に、CocoaPodsでライブラリをインストールする。
 (1で作ったプロジェクトと同じディレクトリに)
 swiftなので、Podは必ず最…

ライブラリを入れる際のよくあるエラー

大抵ライブラリがないときに怒られるか、settingしてないから怒られる

_OBJC_CLASS_$_ referenced from というエラー – bi_naの日記
コンパイルエラー _OBJC_CLASS_$_ファイル名, referenced from というメッセージでコンパイルできないときがある。 Xcodeがファイルの場所を認識していない これは多くの場合、ディレクトリにはファイルが存在しいているが、 Xcodeがそのファイルの場所を把握できていないときに起こる。 ドラッグアンドドロップで解決を ファインダーで開いて、必要なファイルを、 Xcodeのディレクトリを表示しているところに ドラッグアンドドロップすればよい。 このときコピーにチェックを入れなくてよい。 (なぜならファイル自体はあるのに、Xcodeが認識できていないだけだから)。 Xco…
_OBJC_CLASS_$_ referenced from というエラー - bi_naの日記
「clang: error: linker command failed with exit code 1」というエラーへの対処 – Action Script書きの日記
xcodeで書出しを行った際にclang: error: linker command failed with exit code 1というエラーが出たので、備忘録としてメモ。google先生に聞いてみたところ、このエラーが出るのは必要なframeworkが入っていないケースがまずあるという。 その場合は、「TARGET」→「Build Phase」→「Link Binary With Libraries」から、必要なライブラリを足してあげる事で解決する。今回の自分のケースでは、特にライブラリを新規に追加するようなことをした覚えがなく、更に調べてみたところ、同じ名前のクラス、変数、メソッドなど…
「clang: error: linker command failed with exit code 1」というエラーへの対処 - Action Script書きの日記

clang: error: linker command failed with exit code 1 (use -v to see invocation)

MBProgressHUD armv7 error
i’m trying to use MBProgressHUD. i added header an .m to project, imported header in class and call MBProgressHUD from an ibaction in this way:

-(IBAction)submitForm:(id)sender{
MBProgressHUD …

MBProgressHUD armv7 error

could not build Objective-C module ~

swiftでobj-cのライブラリを読み込むとき
Bridging Headerを作成して、moduleを作る

http://tech.admax.ninja/2014/09/26/about-bridging-header/

◆ 根本原因として、git cloneとかでファイル落としてきても、
xcodeにコピーしてファイルとして認識させないとmoduleとして使えない。
importする必要なし。
importしている人はなんでimportされるのか。

pod installした後にheaderフォルダーが生成されるので、
build settingでheaderフォルダを指定する設定を行う。
→ プロジェクトに.hのheaderファイルを置かなくて済むのでファイルは読みやすい

ライブラリを使用するための簡単な流れ

・brinding headerにimportしたいライブラリを記述
・cocoapodsでinstallしたいライブラリを記述
・pod installして、workspaceの方で開く
・productからbuildする

スマートなライブラリの管理の仕方はあまりネットに落ちてないので、
headersのpathを指定すると良いと思います。

よく使うライブラリ

api client周り

SwiftでAlamofireとAFNetworkingの使い方を比較してみる – Qiita
Mattt Thompsonさんが開発した、Swift用のAFNetworkingと、Alamofireをそれぞれ使ってみました。
それぞ、https://itunes.apple.com/search?term=apple&…

・AFNetworking
・SwiftyJson
・Alamofire
・BFTask
・Parse
・SVWebview
・PageMenu

他チュートリアルなど開発中なので、定期的に更新していきます。
YoutubeにあるSwift系の開発映像が、Xcodeの効率的な使い方とかもたまに教えてくれるので、
その辺もザッピングすると効率良い開発ができるかと思います。