LoginSignup
13
8

More than 5 years have passed since last update.

Swift4.2でBool値の反転をtoggleで行う

Posted at

はじめに

Swift4.2からBool値の変更用のメソッドとしてtoggle()が登場しました。
個人用も兼ねてのメモです。

検証環境

以下の環境を使用しています。

  • macOS Version 10.13.4
  • Xcode Version 10.0.0 β3

toggleについて

例えばある項目のチェックのON、OFFを切り替える際に、従来であれば以下のようなコードになっていました。基本的には問題ありませんが、代入時の!をつけ忘れてしまい不具合を発生させる要因になりかねません。

var isChecked = false
@IBAction func didTouchUpInsideCheckButton(sender: UIButton) {
    isChecked = !isChecked
}

Swift4.2以降では以下のように書くことができるようになります。
!のつけ忘れ等の心配もありません。

var isChecked = false
@IBAction func didTouchUpInsideCheckButton(sender: UIButton) {
    isChecked.toggle()
}

Swiftでの実装

Swiftのリポジトリを確認すると、実際の実装は下記のようになっています。

public struct Bool {
  // 省略
}

extension Bool {
  @inlinable
  public mutating func toggle() {
      self = !self
  }
}

mutatingが付与されているため、自身の値の変更が可能になっています。
当然ですが、以下のようにletで定義したBool値に対して使用するとおこられます。

let isHidden = false
isHidden.toggle() 
// Cannot use mutating member on immutable value: 'isHidden' is a 'let' constant

参考

Proposalおよび該当メソッドの箇所を以下のリンクにまとめました。
適宜ご参照ください。

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8