Swift,Objective-Cプログラミング ~ iOS ~

Objective-C,Swift,Apple Watchなどのプログラミング

【iOS Swift入門 #301】Eurekaを使って設定画面の作成

はじめ

テーブルビューを使って、設定画面を作ることがよくある。 よくあるのだから共通化するのがよいのですが、 アプリを作るたびにUITableViewを使って、 Delegateを実装したりしてがんばって作っていました。

探してみると便利なライブラリがあるのでした。

名前はEurekaです。

github.com

これを使って、簡単な設定画面っぽいものを作りました。

導入

CocoaPods

Podfileに下記追加して、pod install or pod updateを実行する

pod 'Eureka'

Carthage

Cartfileに下記追加して、carthage updateを実行する

github "xmartlabs/Eureka" ~> 3.0

実装

画面イメージ

初期画面 f:id:fjswkun:20170523220843p:plain

項目を入力・選択し、「Save」ボタンを押すと、入力・選択した内容がコンソールに表示されます

Nickname入力時 f:id:fjswkun:20170523220928p:plain

Birthday選択時 f:id:fjswkun:20170523221005p:plain

Theme Color選択時 別画面で選択させることができます

f:id:fjswkun:20170523221103p:plain

ソース

import UIKit
import Eureka

enum ThemeColor: String{
    case blue = "blue"
    case red = "red"
    case lightGray = "lightGray"
    case yellow = "yellow"
    
    static func all() -> [ThemeColor]{
        return [
            ThemeColor.blue,
            ThemeColor.red,
            ThemeColor.lightGray,
            ThemeColor.yellow
        ]
    }
}

class ViewController: FormViewController {
    var nickname = ""
    var birthday = Date()
    var alertOn = true
    var themeColor = ThemeColor.blue
    var priority = 0
    
    static var dateFormat: DateFormatter = {
        let f = DateFormatter()
        f.dateFormat = "yyyy/MM/dd"
        
        return f
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        form
        // Profile
        +++ Section("My Profile")
            <<< TextRow(){
                $0.title = "Nickname"
                $0.placeholder = "optional"
                $0.onChange{ [unowned self] row in
                    self.nickname = row.value ?? ""
                }
            }
            <<< DateRow(){
                $0.title = "Birthday"
                $0.dateFormatter = type(of: self).dateFormat
                $0.minimumDate = type(of: self).dateFormat.date(from: "1900/01/01") ?? Date()
                $0.onChange{ [unowned self] row in
                    self.birthday = row.value ?? Date()
                }
            }
        
        // Setting
        +++ Section("Settings")
            <<< SwitchRow(){
                $0.title = "alert"
                $0.value = true
                $0.onChange{ [unowned self] row in
                    self.alertOn = row.value ?? true
                }
            }
            <<< PushRow<String>(){
                $0.title = "Theme Color"
                $0.options = ThemeColor.all().map{$0.rawValue}
                $0.onChange{[unowned self] row in
                    self.themeColor = ThemeColor(rawValue: row.value!) ?? ThemeColor.blue
                }
            }
            <<< SegmentedRow<String>(){
                $0.title = "Priority"
                $0.value = "0"
                $0.options = ["0", "1", "2"]
                $0.onChange{ [unowned self] row in
                    self.priority = Int(row.value ?? "0")!
                }
            }
        
        // Button
        +++ Section()
            <<< ButtonRow(){
                $0.title = "Save"
                $0.onCellSelection{ [unowned self] cell, row in
                    self.printAll()
                }
            }
        
    }
    
    private func printAll(){
        print("Nickname:", nickname)
        print("Birthday:", birthday)
        print("Alrt:", (alertOn ? "On": "Off"))
        print("Theme Color:", themeColor.rawValue)
        print("Priority:", priority)
    }
}

サンプルダウンロード

SampleEureka.zip - Google ドライブ

おわりに

テキストフィールドやデートピッカーやスイッチ、その他たくさん部品が用意されていますが、 自身でカスタム部品を作ることもできるようです。 また、後日にやってみます。

Swift

入門書籍

絶対に挫折しない iPhoneアプリ開発「超」入門 増補改訂第5版
プログラミングが初めて!という人が小さなアプリを作ることで、アプリ開発を学ぶことができます。
「Swiftだけでなく、プログラミング自体が初めてなんだけど、どの本が良い?」と聞かれたときには、
この書籍をおすすめしています。

本気ではじめるiPhoneアプリ作り Xcode 8.x+Swift 3.x対応 (ヤフー黒帯シリーズ)
アプリ開発からApp Storeへの公開までの一通りを学ぶことができます。
入門書を2冊、3冊を読んだあとでこの書籍を読むとかなりの実力アップを感じることができます。

ただし、一通り学ぶことができますが、プログラミング初めてでこの書籍を選ぶことはオススメできません。
最初の方の内容はプログラミング初心者には理解が難しく、そこで勉強をやめてしまう可能性がありそうだと感じます。

Swiftポケットリファレンス
辞書として1冊は持ってても良い。

仕事でやれるレベルになるために

初心者から仕事でやれるレベルになるためにオススメできる日本語書籍がみつかりませんでした。
英語は苦手でも、書籍に書かれているソースはやさしく、読み進めることができます。

The iOS Apprentice (英語サイト・英語書籍)
Swift Apprentice (英語サイト・英語書籍)

平均的プログラマーを超えるために

詳解Swift 第3版
Swift3の書籍。第1版、第2版にもお世話になっています。
Swiftの文法についてとても詳しく書いてあります。

Ray Wenderlich | Tutorials for iPhone / iOS Developers and Gamers
QiitaのSwiftに関する記事