【发布时间】:2015-06-30 13:57:32
【问题描述】:
我已经实现了这样的类:
class MapLayoutGuide: NSObject, UILayoutSupport {
var insetLength: CGFloat = 0
init(insetLength: CGFloat) {
self.insetLength = insetLength
}
var length: CGFloat {
return insetLength
}
}
一切正常,但是新的 iOS 版本引入了新的变化:Apple changelog。
所以现在我收到 3 个错误:
-
Protocol requires property 'topAnchor' with type 'NSLayoutYAxisAnchor', -
Protocol requires property 'bottomAnchor' with type 'NSLayoutYAxisAnchor', -
Protocol requires property 'heightAnchor' with type 'NSLayoutDimension'。
查看UILayoutSupport 实现我可以看到新变量:
@available(iOS 9.0, *)
var topAnchor: NSLayoutYAxisAnchor { get }
@available(iOS 9.0, *)
var bottomAnchor: NSLayoutYAxisAnchor { get }
@available(iOS 9.0, *)
var heightAnchor: NSLayoutDimension { get }
我的应用是iOS 8.0+。所以问题是我应该如何处理这些值..?我无法设置@available 标志,我希望代码同时与iOS 8 和9 一起使用,但我必须覆盖它。不知道如何处理它。
昨天在Xcode Beta 1 上工作的代码,什么 ofc 并不重要,因为我希望它在当前 API 上工作而不是以前的。
【问题讨论】:
-
@available将告诉您该方法/属性/类从哪个 iOS 版本可用,此@available(iOS 9.0, *)表示仅适用于 iOS 9 或更高版本。所以你不能在 iOS 8 中调用这些方法。 -
@rckoenes 这我知道,但我也必须覆盖它(读取错误)。现在的问题是如何实现它,使其在 iOS 9 和 iOS 8 上都可以工作。请重新阅读问题,尤其是最后一段之前的问题(或者如果我的问题不清楚,我希望现在是)。
-
对不起,是的,现在我明白了。在 iOS 9 中,这些 getter 是必需的并且需要实现。如果你实现它们,它们应该可以在 iOS 8 中工作,因为它不会调用它们。
-
@rckoenes Compiler 声称我应该添加
@available(iOS 9.0, *)语句,但它适用于整个班级,而我希望该班级也可以在iOS 8中使用。 -
是的 swift 在这种情况下是严格的,但你我应该没有
@available工作