カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

Swift3で剰余を求める

剰余(割り算の余り)を求めたいとき、「Mod」か「%」を知っていれば事足りていたのですが、Swift3ではできないケースがありましたので、メモしておきます。

Intでは「%」で大丈夫なようですが、FloatやDoubleの場合はエラーになります。

Doubleの場合(Floatも同様)

let n: Double = 12.0
n.truncatingRemainder(dividingBy: 10.0)
1,119 views

WEBから取得したJSONデータを解析しRealmに取り込む

何やらタイトルが長くなってしまいましたが、複合的な内容なのでこうなりました。
今回やりたかったことはタイトルの通りですが、分解すると…
1)WEBからデータをダウンロード
2)バックグラウンドで処理を実行
3)JSONデータを解析
4)解析したデータをRealmに挿入
以上の4つです。

エラーが出なくなるまでかなり苦労したのですが、一番の原因は日本語の扱いに関する部分ですので、
日本語を含まないデータの解析だけならすんなり可能ではないかと思います。

1)WEBからデータをダウンロード

WEBからデータをダウンロードするにはURLSessionを使います。

ダウンロードするURLを指定

let url: String = "http://www.exam.jp/json.php"

セッションを作成します。

let session = URLSession(configuration: URLSessionConfiguration.default)

タスクを登録します。

let task = session.dataTask(with: URLRequest(url: Foundation.URL(string: url)!), completionHandler: {
    (data, response, error) in

    if let urlContent = data {
        // ここに処理を記述
    }

})

作成したタスクを実行します。

task.resume()

2)バックグラウンドで処理を実行

バックグラウンドで処理を実行するには、GCD(Grand Central Dispatch)を使用します。

DispatchQueue.global().async {
    // バックグラウンドスレッドでの処理を記述
}

asyncだと非同期処理、syncだと同期処理になります。
続きを読む…»

3,633 views

Segueの条件分岐

TableViewやCollectionViewを使っているとき、タップしたセルによって遷移するシーンを分岐したい時の方法をご紹介します。
今回はCollectionViewを使っています。

以下の画像のような状態にしたいと思います。

通常、セルからcontrol+ドラッグでセグエを設定するかと思いますが、それだとどちらかのシーンにしかセグエを設定できません。
そのため、View Controllerからセグエを設定します。


ドキュメントアウトラインにてView Controllerを選択し右クリックします。
[Triggered Segues]-[manual]の+をcontrol+ドラッグし遷移したい1つ目のView Controllerでドロップします。

表示方法はShowを選択。

同様に2つ目のView Controllerにも設定します。 続きを読む…»

4,288 views

Navigation Controllerを非表示で使う

Navigation Controllerは非常に便利ですね。
でも画面構成的にどうしても上部に表示されるナビゲーションバーを非表示にしたいことがあります。

ドキュメントアウトラインの[Navigation Controller Scene]-[Navigation Controller]-[Navigation Bar]を選択し、Attributes inspectorを開きます。
Drawingのところの「Hidden」にチェックを入れます。

これだけだと、ナビゲーションバーは非表示になりましたが、上部に隙間が出来る場合があります。
そんなときはviewDidLoadに次のコードを記述すれば解決できます。

self.automaticallyAdjustsScrollViewInsets = false

Navigation ControllerにもAttributes inspectorを開けば、Bar Visibilityのところに「Shows Navigation Bar」のチェックがあり、こちらを外せば非表示にはなるのですが、画面左端からスワイプしても戻れなくなりました。

Xcode: 8.3.1
Swift: 3.1
OS: Sierra 10.12

2,460 views

ジェスチャーを扱う UIGestureRecognizer

UIGestureRecognizerはジェスチャー全般を扱うことができるクラスです。
タップやスワイプ、ロングプレス等のジェスチャーを扱うことができます。

今回はスワイプの例を挙げますが、その他も似た感じで実装することが可能です。

まずは、実行するメソッドを用意します。

func rightSwipeView(sender: UISwipeGestureRecognizer) {
    // ここに処理を記述
}

次にviewDidLoad内に以下を記述します。

let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(myViewController.rightSwipeView(sender:)))
rightSwipe.direction = .right
self.view.addGestureRecognizer(rightSwipe)

Xcode: 8.3.1
Swift: 3.1
OS: Sierra 10.12

1,651 views