Swift で変数のクラスをテストするにはどうすればいいですか? 質問する

Swift で変数のクラスをテストするにはどうすればいいですか? 質問する

配列の要素が Swift の UILabel のサブクラスであるかどうかを確認したい:

import UIKit

var u1 = UILabel()
u1.text="hello"
var u2 = UIView(frame: CGRectMake(0, 0, 200, 20))
var u3 = UITableView(frame: CGRectMake(0, 20, 200, 80))

var myArray = [u1, u2, u3]

var onlyUILabels = myArray.filter({"what to put here?"})

Objective-C へのブリッジなし。

ベストアンサー1

Swift にはis値の型をテストする演算子があります。

var onlyUILabels = myArray.filter { $0 is UILabel }

ちなみに、これは ではArray<UIView>なくを生成しますArray<UILabel>。Swift 2 ベータ シリーズでは、flatMap を次のように使用できます。

var onlyUILabels = myArray.flatMap { $0 as? UILabel }

以前 (Swift 1) ではキャストできましたが、これは機能するものの、少し見苦しい感じがしました。

var onlyUILabels = myArray.filter { $0 is UILabel } as! Array<UILabel>

あるいは、ラベルだけのリストを作成する何らかの方法が必要です。ただし、標準的なものは見当たりません。おそらく次のようなものでしょう。

extension Array {
    func mapOptional<U>(f: (T -> U?)) -> Array<U> {
        var result = Array<U>()
        for original in self {
            let transformed: U? = f(original)
            if let transformed = transformed {
                result.append(transformed)
            }
        }
        return result
    }
}
var onlyUILabels = myArray.mapOptional { $0 as? UILabel }

おすすめ記事