5

Xcode 8 beta 6 は に置き換えられましAnyObjectAny

場合によってはa.classForCoder、デバッグの理由でその内容を確認するために使用しました。これAnyObjectでうまくいきました。これAnyではもう動作しません。

使用する必要がAnyあるので、型の変数に含まれる型を確認するための推奨される方法は何Anyですか?

多くの場合、これはXcode 8 ベータ 6 以降では確認されていないため、キャストはAnyObjectあまり有用ではないようです。StringStringAnyObject

4

1 に答える 1

9

type(of:) の使用

type(of:)type の変数に含まれる変数の型を調べるために使用できますAny

let a: Any = "hello"
print(type(of: a))  // String

let b: Any = 3.14
print(type(of: b))  // Double

import Foundation
let c: Any = "hello" as NSString
print(type(of: c))  // __NSCFString

let d: Any = ["one": 1, "two": "two"]
print(type(of: d))  //  Dictionary<String, Any>

struct Person { var name = "Bill" }
let e: Any = Person()
print(type(of: e))  // Person

classForCoder の使用

classForCoderはまだ存在し、型の値を にキャストできますがAnyAnyObject値が Swift 値型の場合、元の型ではなく変換された結果が得られます。

import Foundation // or import UIKit or import Cocoa

let f: Any = "bye"
print((f as AnyObject).classForCoder)  // NSString
print(type(of: f))                     // String

let g: Any = 2
print((g as AnyObject).classForCoder)  // NSNumber
print(type(of: g))                     // Int

let h: Any = [1: "one", 2: 2.0]
print((h as AnyObject).classForCoder)  // NSDictionary
print(type(of: h))                     // Dictionary<Int, Any>

struct Dog { var name = "Orion" }
let i: Any = Dog()
print((i as AnyObject).classForCoder)  // _SwiftValue
print(type(of: i))                     // Dog

// For an object, the result is the same
let j: Any = UIButton()
print((j as AnyObject).classForCoder)  // UIButton
print(type(of: j))                     // UIButton
于 2016-08-15T22:44:02.623 に答える