【问题标题】:@available with pre-available iOS versions - missing properties@available 与预可用的 iOS 版本 - 缺少属性
【发布时间】: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 89 一起使用,但我必须覆盖它。不知道如何处理它。

昨天在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 工作

标签: ios swift ios9


【解决方案1】:

清理项目后它工作了。

@available(iOS 9.0, *)
var topAnchor: NSLayoutYAxisAnchor {
    return NSLayoutYAxisAnchor()
}


@available(iOS 9.0, *)
var bottomAnchor: NSLayoutYAxisAnchor {
    return NSLayoutYAxisAnchor()
}


@available(iOS 9.0, *)
var heightAnchor: NSLayoutDimension {
    return NSLayoutDimension()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2017-08-25
    相关资源
    最近更新 更多