LoginSignup
2
3

More than 5 years have passed since last update.

Convert Signed Int to Unsigned Int

Last updated at Posted at 2015-09-23

CoreLocation関連で結構困ったのでまとめておく。
といっても内容としては大した話ではない。

How to convert NSNumber to Uint16

let hoge: Int16 = 78
let num = NSNumber(short: hoge)
let uint_num = UInt16(bitPattern: num.shortValue)

結論だけ言うと、上記のようにすればNSNumberUInt16に変換できる。

背景

CLBeaconRegioninit()において、引数majorminorの型CLBeaconMajorValueCLBeaconMinorValue基底型はUInt16である。

CLBeaconRegion Initializer
init(proximityUUID proximityUUID: NSUUID,
major major: CLBeaconMajorValue,
minor minor: CLBeaconMinorValue,
identifier identifier: String)

しかし、CLBeaconRegionCLBeaconのメンバー変数majorminorを取り出してみると、その型はNSNumber?である。

Declaration
var major: NSNumber { get }

例えばlocationManager(_:didRangeBeacons:inRegion:)なんかで受け取ったinRegionからmajorminorなんかを取り出して、改めてCLBeaconRegionとしてなんかしようと思った時に、大変苦労した覚えがある。
castしようとしてみたり、辞書型を使って解決しようと試みたが失敗に終わり、上記のような変換に至った。

一般的な情報科学の常識に則って考えると、上記はとても簡潔でわかりやすい変換なのだが、そういうのをすぽーんと忘れて小手先だけで言語を扱うと痛い目に遭う。
そういうお話。

2
3
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
2
3