区块链技术博客
www.b2bchain.cn

@available 修饰类成员变量报错 Stored properties cannot be marked potentially unavailable求职学习资料

本文介绍了@available 修饰类成员变量报错 Stored properties cannot be marked potentially unavailable求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

发现 Swift 一个关于 @available 有趣的问题, 我在自己封装的 TableView 里面添加一个系统支持 iOS 11 以上的 var “UISwipeActionsConfiguration” 用于支持列表 Cell 左滑编辑删除功能.
我试着模仿 UITableView 的写法来对 Var 进行修饰, 但是 IDE 直接编译报错了, 我只能尝试另一种 set get 的方式来修饰, 让我不禁对 Apple 开源的 Swift 源码表示怀疑其是如何隐藏实现通过编译的.

下面是 Apple 示例代码:

(iOS 2.0, *) open class UITableView : UIScrollView, NSCoding, UIDataSourceTranslating {    (iOS 10.0, *)     weak open var prefetchDataSource: UITableViewDataSourcePrefetching?     (iOS 11.0, *)     weak open var dragDelegate: UITableViewDragDelegate?     (iOS 11.0, *)     weak open var dropDelegate: UITableViewDropDelegate? }

下面是我的示例代码:

(iOS 11.0, *) public protocol HTCTableViewDelegate {     func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? }(iOS 11.0, *) public typealias EditSwipeActionsCellCallback = (_ viewModel: Any, _ sectionModel: HTCTableViewSection) -> UISwipeActionsConfiguration?   public class JSDTableView : UITableView, UITableViewDataSource, UITableViewDelegate {    (iOS 11.0, *)     public var editSwipeActionsCallback: EditSwipeActionsCellCallback?     (iOS 11.0, *)     weak open var jsdDelegate: HTCTableViewDelegate?  }

我的代码没有正常通过编译, IDE 报错提示: Stored properties cannot be marked potentially unavailable with ‘@available’

最终我只能通过下面的方式来实现:

(iOS 11.0, *) public typealias EditSwipeActionsCellCallback = (_ viewModel: Any, _ sectionModel: HTCTableViewSection) -> UISwipeActionsConfiguration?   public class HTCTableView : UITableView, UITableViewDataSource, UITableViewDelegate {     private var _editSwipeActionsCallback: Any? = nil     (iOS 11.0, *)     var editSwipeActionsCallback: EditSwipeActionsCellCallback? {         get {             return _editSwipeActionsCallback as? EditSwipeActionsCellCallback         }         set {             _editSwipeActionsCallback = newValue         }     } }

最终的代码能正常进行功能, 但是我非常想了解 Apple 背后对 Swift 开源的 UITableView 是如何实现对 var 使用 @available(iOS 11.0, *) 修饰 Var。

参考:

Swift API Availability

Stackoverfolw

Swift 2 and @available properties

发现 Swift 一个关于 @available 有趣的问题, 我在自己封装的 TableView 里面添加一个系统支持 iOS 11 以上的 var “UISwipeActionsConfiguration” 用于支持列表 Cell 左滑编辑删除功能.
我试着模仿 UITableView 的写法来对 Var 进行修饰, 但是 IDE 直接编译报错了, 我只能尝试另一种 set get 的方式来修饰, 让我不禁对 Apple 开源的 Swift 源码表示怀疑其是如何隐藏实现通过编译的.

下面是 Apple 示例代码:

(iOS 2.0, *) open class UITableView : UIScrollView, NSCoding, UIDataSourceTranslating {    (iOS 10.0, *)     weak open var prefetchDataSource: UITableViewDataSourcePrefetching?     (iOS 11.0, *)     weak open var dragDelegate: UITableViewDragDelegate?     (iOS 11.0, *)     weak open var dropDelegate: UITableViewDropDelegate? }

下面是我的示例代码:

(iOS 11.0, *) public protocol HTCTableViewDelegate {     func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? }(iOS 11.0, *) public typealias EditSwipeActionsCellCallback = (_ viewModel: Any, _ sectionModel: HTCTableViewSection) -> UISwipeActionsConfiguration?   public class JSDTableView : UITableView, UITableViewDataSource, UITableViewDelegate {    (iOS 11.0, *)     public var editSwipeActionsCallback: EditSwipeActionsCellCallback?     (iOS 11.0, *)     weak open var jsdDelegate: HTCTableViewDelegate?  }

我的代码没有正常通过编译, IDE 报错提示: Stored properties cannot be marked potentially unavailable with ‘@available’

最终我只能通过下面的方式来实现:

(iOS 11.0, *) public typealias EditSwipeActionsCellCallback = (_ viewModel: Any, _ sectionModel: HTCTableViewSection) -> UISwipeActionsConfiguration?   public class HTCTableView : UITableView, UITableViewDataSource, UITableViewDelegate {     private var _editSwipeActionsCallback: Any? = nil     (iOS 11.0, *)     var editSwipeActionsCallback: EditSwipeActionsCellCallback? {         get {             return _editSwipeActionsCallback as? EditSwipeActionsCellCallback         }         set {             _editSwipeActionsCallback = newValue         }     } }

最终的代码能正常进行功能, 但是我非常想了解 Apple 背后对 Swift 开源的 UITableView 是如何实现对 var 使用 @available(iOS 11.0, *) 修饰 Var。

参考:

Swift API Availability

Stackoverfolw

Swift 2 and @available properties

发现 Swift 一个关于 @available 有趣的问题, 我在自己封装的 TableView 里面添加一个系统支持 iOS 11 以上的 var “UISwipeActionsConfiguration” 用于支持列表 Cell 左滑编辑删除功能.
我试着模仿 UITableView 的写法来对 Var 进行修饰, 但是 IDE 直接编译报错了, 我只能尝试另一种 set get 的方式来修饰, 让我不禁对 Apple 开源的 Swift 源码表示怀疑其是如何隐藏实现通过编译的.

下面是 Apple 示例代码:

(iOS 2.0, *) open class UITableView : UIScrollView, NSCoding, UIDataSourceTranslating {    (iOS 10.0, *)     weak open var prefetchDataSource: UITableViewDataSourcePrefetching?     (iOS 11.0, *)     weak open var dragDelegate: UITableViewDragDelegate?     (iOS 11.0, *)     weak open var dropDelegate: UITableViewDropDelegate? }

下面是我的示例代码:

(iOS 11.0, *) public protocol HTCTableViewDelegate {     func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? }(iOS 11.0, *) public typealias EditSwipeActionsCellCallback = (_ viewModel: Any, _ sectionModel: HTCTableViewSection) -> UISwipeActionsConfiguration?   public class JSDTableView : UITableView, UITableViewDataSource, UITableViewDelegate {    (iOS 11.0, *)     public var editSwipeActionsCallback: EditSwipeActionsCellCallback?     (iOS 11.0, *)     weak open var jsdDelegate: HTCTableViewDelegate?  }

我的代码没有正常通过编译, IDE 报错提示: Stored properties cannot be marked potentially unavailable with ‘@available’

最终我只能通过下面的方式来实现:

(iOS 11.0, *) public typealias EditSwipeActionsCellCallback = (_ viewModel: Any, _ sectionModel: HTCTableViewSection) -> UISwipeActionsConfiguration?   public class HTCTableView : UITableView, UITableViewDataSource, UITableViewDelegate {     private var _editSwipeActionsCallback: Any? = nil     (iOS 11.0, *)     var editSwipeActionsCallback: EditSwipeActionsCellCallback? {         get {             return _editSwipeActionsCallback as? EditSwipeActionsCellCallback         }         set {             _editSwipeActionsCallback = newValue         }     } }

最终的代码能正常进行功能, 但是我非常想了解 Apple 背后对 Swift 开源的 UITableView 是如何实现对 var 使用 @available(iOS 11.0, *) 修饰 Var。

参考:

Swift API Availability

Stackoverfolw

Swift 2 and @available properties

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » @available 修饰类成员变量报错 Stored properties cannot be marked potentially unavailable求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们