面白きことは良きことなり

拙く未熟なiOSエンジニアの備忘録と戯言

RxSwift+MVVMで出てくるサイトのコードの備忘録

RxSwift+MVVMで上位に引っかかるRealm

academy.realm.io

RxSwiftとMVVMを勉強しようとした際、上記サイトが上位にくるものの、記載されているコードを今写経してもエラーがでるのみで正常に動かなかった。
調べたり試行錯誤して動くようにできたので記録しておく。

というかほぼStackOverflow先生に答えがあったようなものだった。

動作環境

  • Xcode8.3.3
  • RxSwift 3.6.1

コード

// View(ViewController)
import UIKit
import RxCocoa
import RxSwift

class LoginViewController: UIViewController {

    @IBOutlet var usernameTextFiled: UITextField!
    @IBOutlet var passwordTextFiled: UITextField!
    @IBOutlet var confirmButton: UIButton!
    
    var viewModel = LoginViewModel()
    let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        usernameTextFiled.rx.text.orEmpty.bind(to: viewModel.username).disposed(by: disposeBag)
        passwordTextFiled.rx.text.orEmpty.bind(to: viewModel.password).disposed(by: disposeBag)
        
        viewModel.isValid.map { $0 }.bind(to: confirmButton.rx.isEnabled).disposed(by: disposeBag)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}
// ViewModel
import Foundation
import RxSwift

struct LoginViewModel {

    var username = Variable<String>("")
    var password = Variable<String>("")

    var isValid: Observable<Bool> {
        return Observable.combineLatest(self.username.asObservable(), self.password.asObservable()) { (username, password) in
            return username.characters.count > 0 && password.characters.count > 0
        }
    }
}

Swift2からSwift3への移行期にもよくあったけど、RxSwiftも古い情報がひっかかりやすく、最新のVersionでの書き方がわからず四苦八苦する状態に陥っている。

参考サイト

ios - UITextField binding to ViewModel with RxSwift - Stack Overflow

Carthageでversion指定の書き方を忘れるのでメモ

ふとした時、書き方を忘れ、色々漁って探し直すのが大変なので、ここにメモとして残す。 基本 ~> で書くか == で書くことが多いと思う。

# コメント

# ~> 互換性のある最大のversion指定
# ex. 3.0以上かつ4.0未満の最大のversion
github "ReactiveX/RxSwift" ~> 3.0

# >= 指定以上の最大のversion
# ex. 3.0以上の最大のversion
github "ReactiveX/RxSwift" >= 3.0

# == 指定のversion
# ex. 3.0固定
github "ReactiveX/RxSwift" == 3.0

記述が終わったら下記コマンドを叩く

$ carthage update

Macでのかな変換、カナ変換、英字変換

記事にした経緯

自分も知らなかったし、未だあまり知られて方法もあるので記載

方式名は適当につけているので正式名称ではありません。

また、日本語キーボード基準で記載しているので、英字キーボードの人は適宜読み替えが必要かもしれません、

FunctionKey方式

日本語入力し、未確定中に下記keyを押すと一発変換できる

変換 コマンド
かな変換 F6
全角カナ変換 F7
半角英字変換 F8
全角英字変換 F9


ちなみにWindowsの時は下記となっていて微妙に異なる

変換 コマンド
かな変換 F6
全角カナ変換 F7
半角カナ変換 F8
全角英字変換 F9
半角英字変換 F10


Control+方式

日本語入力し、未確定中に下記Keyを押すと一発変換できる

変換 コマンド(ショートカット)
かな変換 Control + J (^J)
全角カナ変換 Control + K (^K)
全角英字変換 Control + L (^L)
半角英字変換 Control + ; (^;)

FunctionKey方式とKeyの並び順が、全角英字と半角英字で入れ替わっているので微妙に注意


英数Key方式

ローマ字入力中から半角英数のみに一発変換できる特殊な方式

変換 コマンド
半角英字変換 英数Key × 2


あとがき

TouchBarにより、FunctionKeyの変換が使いにくいとかたまに聞く。

そんな人はControl+方式になれると幾分かストレスが減るかも。

MacApp購入予定リスト(WWDCに備えて)

※一部絶対割引されないものも混じっている。

AppleScriptをSwiftで記述できるアプリ

Scriptarian - Scripting Studio for macOS

Git管理アプリ

www.git-tower.com

Diffアプリ

www.kaleidoscopeapp.com

鉄板のDesignerアプリ

Sketch - Professional Digital Design for Mac

デザインからコードを生成するアプリ

www.paintcodeapp.com

iOSシミュレーター管理アプリ

simpholders.com

アニメーションのプロトタイプ作成アプリ

kiteapp.co

プラグインで万能なテキストエディタ

www.sublimetext.com

各言語のIDE

www.jetbrains.com

RAYZ Plusを購入したので開封と感想(追記05/31)

当初の発売日から2ヶ月経ってやっと発売

RAYZ PlusというiPhone向けのLightningイヤホンが当初の3月末発売から2ヶ月経った今日 に一般発売された。 av.watch.impress.co.jp

海外では、3月末に発売されていたが、国内は諸事情により1ヶ月延期となり・・・ 1ヶ月後の4月末には唐突に、auのStoreでのみ1ヶ月間先行販売とすると発表され・・・ 結局一般発売は5月22日だった。

記事を見たその日のうちにヨドバシで購入。

お値段¥17,000前後

価格は、¥17,000前後と言われていたのに¥19,310、そこに1,931ポイント付く。 実質¥17,379・・・ま、まぁ¥17,000前後かな?!

色々発売までに不満はあれど・・・

発売までに紆余曲折あり、正直ONKYOとかPioneerに対するヘイト値は、かなり上昇した。 ONKYO好きだったから余計に今回のgdgdした発売までの流れは許せない。

そんな不満はあるものの、音質重視のLightningケーブルタイプのイヤホンで、ネックとなっていた音楽聴きながらの充電が可能なLightningケーブルのイヤホンが出たのだから欲しくもなる。

過去にradiusのLightningイヤホン買っていて、充電に困っていたからなおさらね。
aryzae.hatenablog.com

さらに、ノイズキャンセリング機能つきらしく、そこも興味を引いた。

RAYZ Plus(ブロンズ)を開梱したらこんな感じ

正面

f:id:aryzae:20170523003939p:plain:w300

開封1

f:id:aryzae:20170523003747p:plain:w300

開封2

f:id:aryzae:20170523003853p:plain:w300

イヤーピース 3種類 × 3サイズ

上からスポンジ、ゴム幅広め、ゴム幅狭め
左からS、M、L

f:id:aryzae:20170523003956p:plain:w300

充電用Lightning口の側面

f:id:aryzae:20170523003814p:plain:w300

充電用Lightning口の正面

f:id:aryzae:20170523003835p:plain:w300

充電用Lightning口にLightningケーブル挿した図 (ださい)

f:id:aryzae:20170523003920p:plain:w300

専用アプリでキャリブレーションやsmartボタンのカスタマイズ

RAYZ専用のアプリがあるので、それを使用してキャリブレーションやsmartボタンのカスタマイズが可能

Rayz by Pioneer

Rayz by Pioneer

  • Appcessori Corporation
  • ライフスタイル
  • 無料

RAYZシリーズを挿していないとメニューすら出ない

f:id:aryzae:20170523004640p:plain:w300

メニューはシンプル

f:id:aryzae:20170523004644p:plain:w300

smartボタンはクリック、ダブルクリック、プレス(長押し)を割り当てれるみたい

f:id:aryzae:20170523004649p:plain:w300

少し触って見た感想

音楽再生アプリ

まず、radiusのLightningイヤホン購入時に一緒に買った、音楽再生アプリ"NePLAYER"が無駄にならなかったことがありがたい。

NePLAYERは、radiusのLightningイヤホンを挿している時に使える再生周りの設定があるのだけど、RAYZ Plusを挿した場合でも同様に使えることがわかった。

NePLAYER自体よくできていて、ハイレゾ再生にも対応してるため、音楽再生アプリを変えずに済んだことはかなり大きい。

音質

音質自体は好みあるし、多くのイヤホンを持って色々聞き分けできるわけでもないので、素人なりの感想になるが、細かい音も聞こえやすく、割と上品な感じがする。
後述するノイズキャンセリング機能が影響してることも大きいだろうが、伊達に音響メーカーが作ったわけではない良質な音がなっている。

radiusのLightningイヤホンより、聴きやすく耳障りの良い音がすると思った。

ノイズキャンセル

おまけ程度の機能と鷹をくくっていた。
まだ全然試せていないし、ノイズキャンセル機能持ち自体初めてなので、効いているのかがよくわからない。

とりあえず、PCスピーカーからTVとかを垂れ流しつつノイズキャンセルを試したところ、TV側のボリュームを夜に苦情がくるレベルまであげないことには、ほぼ音楽しか耳には聞こえなかった。(音楽自体はiPhoneのボリュームを2や3で試聴していた。)

この変に関しては、もう少し日常(満員電車や市街地)で使ってから追記しようかと思っている。

まとめ

まだ使い始めで、性能を掴みきれていないが、radiusの¥15,000前後のLightningケーブルを買うなら、数千円足してRAYZ Plusを買った方が断然良いとだけ断言できる。 音質が上で、ノイズキャンセル付いてて、音楽聴きながら充電できる素晴らしいイヤホンだと思う。

ぶっちゃけ、Lightningイヤホンの中で最高かつ最強かもしれない。
(値段も最高かもしれない。)

次期iPhoneがLightningではなく、USB Type-Cという噂もあり、もしかすると次のiPhoneで使えない可能性も微々たる可能性はあるが、その時はその時。
(USB Type-Cのコネクタ口はLightningより厚いので、Type-Cを採用するとiPhoneを厚くしなければいけなくなる。今まで薄型化していた意味がなくなるので、Type-Cの採用はないと思っている。)

RAYZ Plusを是非買うといいと思う!

1週間使用してみた感想 ☆☆☆☆★ (追記05/31)

良かった点

  • 音質は低音やや強めだが、聴きやすい万人向けな音を出す印象。
  • ノイズキャンセルのためにiPhoneから電力を供給されるので、消費電力が増すが、普段の電池の減りから誤差程度でしか増えてない印象
  • 人の会話程度ならノイズキャンセルでかなり聞こえなくなる。電車内のアナウンスには効果薄い。スポンジのイヤーピース等でもっと耳を密閉すると効果が高くなるかも。
  • Lightningのメス端子が電力供給以外にも、PCとの同期やバックアップも正常に行える
  • MDR-1000Xのアンビエントサウンドモードのような、外部の音を取り込みつつ音楽が聞けるモードがある(smartボタンか専用アプリから切り替え可能)

悪かった点もしくは気になる点

  • ノイズキャンセルをONにしているとホワイトノイズのようなものが微かに聞こえる (他のメーカーのノイズキャンセルがどうなのかわからないため、普通なのかもしれない)
  • イヤホンからコネクタ部分の間に、充電用のLightningのメス端子があるため、ケーブルとの接合部があることで、ケーブル破損の可能性が少し増している
  • iPhoneに挿しているのに認識されないことがある。挿し直せばなおることもある (個体差か、初期不良の可能性もあるので、また再発するようなら交換等してもらう予定)
  • ケーブルが全体的にやや硬い (Apple標準のイヤホンケーブルよりも硬い)
  • ケーブルが2又に分かれた先の長さが同じため、コンビニ等の会計時にイヤホン外すとケーブルのかける場所に困る (服を挟めるクリップのようなものが付いているが、あまり使えない)

まとめ

iPhoneで高音質を求めるけど、DACとかで重量や厚みを増したくない人やお金に余裕がある人なら買って損はない!