我正在使用CircleCI为单元测试构建项目,它使用 XCode 8 。以下代码崩溃,因为它使用safeAreaLayoutGuide
的{{1}}属性,即使在检查 iOS 11 <后, iOS 10 SDK 中也不存在/ strong>即可。
UIView
if #available(iOS 11, *) {
make.top.equalTo(testView.safeAreaLayoutGuide.snp.top)
}
是testView
。我们在这里为导航栏添加约束。有没有更好的方法来检查UIView是否有这个特定的属性? UIView
不是safeAreaLayoutGuide
。
错误消息:类型&#39; UIView&#39;的值没有会员 &#39; safeAreaLayoutGuide&#39;
答案 0 :(得分:2)
你应该可以使用respondsToSelector,因为UIView仍然符合NSObjectProtocol:
if testView.responds(to: #selector(safeAreaLayoutGuide)) {
make.top.equalTo(testView.safeAreaLayoutGuide.snp.top)
}
答案 1 :(得分:0)
如果您使用safeAreaLayoutGuide
,则应仅使用 Xcode 9 + 。
由于safeAreaLayoutGuide
属于UIView
属性,因此会在 ios11 SDK 中添加。
if #available(iOS 11, *) {
print("for iOS 11 User")
} else {
print("for iOS < 11 user")
}
以上检查if
条件主要用于 iOS11 &amp;在else
部分,代码将针对那些使用较低版本运行的用户,例如 iOS10 。
答案 2 :(得分:0)
CircleCI会使if #available(iOS 11, *)
的构建失败。我会说用你的circle.yml文件升级到XCode 9。在此之前使用视图的视图控制器的toplayoutguide。