gpt4 book ai didi

ios - 如何在 Swift 中测试变量的类?

转载 作者:IT王子 更新时间:2023-10-29 05:06:31 26 4
gpt4 key购买 nike

我想检查数组的元素是否是 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。

最佳答案

Swift 有 is运算符来测试值的类型:

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

作为旁注,这仍然会产生一个 Array<UIView> , 不是 Array<UILabel> .从 Swift 2 beta 系列开始,您可以为此使用 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 }

关于ios - 如何在 Swift 中测试变量的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24097825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com