LoginSignup
4
4

More than 5 years have passed since last update.

Swift 2.2で警告が出るようになった後置インクリメントをdeferに置き換える

Last updated at Posted at 2016-03-23

Swift 2.2から++--を使っていると警告が出るようになりました。

SE-0004 Remove the ++ and -- operators

++は変数の前に書くか後ろに書くかで挙動が変わるし、もうみんな使わないよね?ということらしいです。

var x = 0
print(x++) // 0
print(x)   // 1
print(++x) // 2

確かに最近使わなくなったよなぁと思っていたら、自作ライブラリのJSONRPCKitで使ってました\(^o^)/

NumberIdentifierGenerator.swift

public class NumberIdentifierGenerator: RequestIdentifierGenerator {

    private var currentIdentifier = 1

    public func next() -> RequestIdentifier {
        return .NumberIdentifier(currentIdentifier++) // ←ココ
    }
}

なるほど、現在の値を使ってreturnした後にインクリメントしたかったようです。

これはdeferの出番ですね!

    public func next() -> RequestIdentifier {
        defer {
            currentIdentifier += 1
        }

        return .NumberIdentifier(currentIdentifier)
    }

これで解決!

・・・

でも、たぶん実際にはこうやって直すと思います。ごめんよ、defer…。

public class NumberIdentifierGenerator: RequestIdentifierGenerator {

    private var currentIdentifier = 0

    public func next() -> RequestIdentifier {
        currentIdentifier += 1
        return .NumberIdentifier(currentIdentifier)
    }
}
4
4
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
4
4