我想检查数组的元素是否是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?"})
不与目标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 }
问题内容: 在Swift中是否有确定变量类型的函数?我想可能会有类似Python的东西。 我想一种判断变量是Swift中的Foundation对象还是C变量的方法。就像NSString vs String,或NSArray vs array。这样我就可以在控制台中注销并清楚地看到它是什么。 例如,我想知道下面第一个推断的类型: 在这个问题中,我已经看到判断 给定 变量是否是 给定 类型的答案,但我
我正在使用Postman的打包应用程序版本来针对我的Rest API编写测试。我正在尝试管理连续测试之间的状态。为了方便起见,向Javascript测试运行时公开的Postman对象有设置变量的方法,但没有用于读取的方法。 现在,我可以在下一次调用中通过{{key}}结构读取这个值,该结构从当前环境中获取值。但是,这在测试中不起作用;它只在建筑材料中起作用。 那么,有没有人可以从测试中读到这些东西
问题内容: 我试图设置一个全局变量。就我而言,只是一个布尔标志,用于指示是否首次显示视图: 呈现视图后,我想将此标志设置为false: 然后检查它: 因此,我想创建一个全局变量。在哪里以及如何?我试过了: 在我的视图控制器领域 在我的AppDelegate.swift文件中的方法中 在班上 没运气。我收到一条错误消息 (注意:我意识到,在这个问题中,我背叛了我对Swift中如何处理范围的无知。请原
问题内容: 我希望能够以原子方式递增计数器,而我却找不到有关如何执行此操作的参考。 根据评论添加更多信息: 您正在使用GCD吗?不,我没有使用GCD。必须使用队列系统来增加数字似乎过大了。 请 您理解基本的线程安全?是的,否则我不会问原子增量的问题。 这个变量是局部变量吗?没有。 它是实例级别吗? 是的,它应该是单个实例的一部分。 我想做这样的事情: 问题答案: 来自低级并发API: OSAtom
问题内容: 有没有一种方法可以快速打印变量的运行时类型?例如: 在上面的示例中,我正在寻找一种方法来表明变量“ soon”的类型为,或至少为。 问题答案: 2016年9月更新 Swift 3.0:使用,例如(因为关键字已删除) 2015年10月更新 : 我将下面的示例更新为新的Swift 2.0语法(例如,已被替换为,现在是)。 从Xcode 6.3发行说明 : @nschum在注释中指出Xcod
问题内容: 我只是不知道如何确定传递给脚本的参数是否为数字。 我要做的就是这样: 有什么帮助吗? 问题答案: 一种方法是使用正则表达式,如下所示: 如果该值不一定是整数,请考虑适当修改正则表达式;例如: …或使用带符号处理数字: