检查UIView是否有财产

时间:2017-10-14 02:11:15

标签: ios swift uiview

我正在使用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;

3 个答案:

答案 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

Apple Doc

答案 2 :(得分:0)

CircleCI会使if #available(iOS 11, *)的构建失败。我会说用你的circle.yml文件升级到XCode 9。在此之前使用视图的视图控制器的toplayoutguide。