マッピンやデバッグやテストで使えそうなので、どんな状況使えそうかメモしときます。
ドキュメント
- String(describing:)
環境
この記事のコードは
- Xcode 11.2.1
で実行できます
id のタイプが揺れてる時
id のタイプが雑で取り扱われて、 String か Int になってりすることありますよね。
そしてそれに対してモバイルがわなんとかしたい時使えます
let id1: Any = "1" // String
let id2: Any = 1 // Int
String(describing:) を使えば中身間違えなく String 型に
let stringId1 = String(describing: id1) // "1"
let stringId2 = String(describing: id2) // "1"
で、こういうような書き方はいらなくなるでしょう
// value のタイプは Any
if let value = value as? String {
return value
} else if let value = value as? Int {
return String(value)
} else {
// ry
}
enum の名前をプリントアウトする
携わってるプロジェクトにこういうようなテストヘルパがあります。
// 定義された enum
enum FruitType: Int {
// Just put some random numbers over here
case dragonFruit = 777
case apple = 988
}
// テストヘルバ
func createActivity(type: FruitType, raw: Int) {
XCTContext.runActivity(named: "") { _ in
XCTAssertEqual(raw, type.rawValue)
}
}
// テストケース
import XCTest
@testable import YourTargetName
class FruitTypeTests: XCTestCase {
func testDefinitions() {
XCTContext.runActivity(named: "test definitions of FruitType's cases") { _ in
createActivity(type: .dragonFruit, raw: 777)
createActivity(type: .apple, raw: 988)
}
}
}
テストヘルパのところ、 name は定義されてないから、テスト結果はこうなってよくわからないレポートになってしまいます:
rawValue をその name の引数に入れるのも可能なのですが、これはさすがにわかり辛いなのでは。という気持ちはありました。
どうしてもケース名表示したい!
改善したいためヘルパーをこうやって改造してみたら
func createActivity(type: FruitType, raw: Int) {
let typeName = String(describing: type)
XCTContext.runActivity(named: "test the raw value of .\(typeName) is \(raw)") { _ in
XCTAssertEqual(raw, type.rawValue)
}
}
テストレポートもこうなりました
締め
とりあえず二つを書いてみました!以上です。
おかしいところ、間違えたところありましたぜひコメント欄へよろしくお願いします。
最後
台湾産のドラゴンフルーツはめっちゃうまいよ!