Swift 小笔记 | 使用 @discardableResult 忽略返回值

场景

我封装了一个占位图:

/// 在指定view上展示占位图,默认覆盖整个view,如需调整约束可以对返回值进行修改
/// - Parameter view: 展示占位图的view
/// - Parameter type: 占位图类型
/// - Parameter title: title
/// - Parameter tapedColsure: 占位图点击回调
class func show(on view: UIView, type: PlaceholderViewType!, title: String!, tapedColsure: ViewTapedClosure) -> PlaceholderView {
    // 先移除已有的
    remove(from: view)

    let placeholderView = PlaceholderView(type: type, title: title, tapedColsure: tapedColsure)
    view.addSubview(placeholderView)
    placeholderView.snp.makeConstraints { (make) in
        make.top.left.width.height.equalToSuperview()
    }

    return placeholderView
}

占位图默认覆盖整个view,但有些情况下要求不覆盖整个view,因此我给这个show方法提供了一个返回值,需要的时候可以任意调整,如:

let placeholderView = PlaceholderView.show(on: self.view, type: .loadFailed, title: "网络不给力") {
    self.loadData()
}
placeholderView.snp.remakeConstraints { (make) in
    make.left.right.equalToSuperview()
    make.top.bottom.equalTo(self.raffleListView)
}

但是大部分时候都是不需要的,不需要对占位图进行任何调整,如:

PlaceholderView.show(on: tableView, type: .noData, title: "无数据") {
    print("点击占位图")
}

这个时候 Xcode 就会给个⚠️:

Result of call to 'show(on:type:title:tapedColsure:)' is unused

一种方式是使用 let _ 忽略返回值:

let _ = PlaceholderView.show(on: tableView, type: .noData, title: "无数据") {
    print("点击占位图")
}

但是更优雅的方式是直接在定义函数的地方加上 @discardableResult 忽略返回值:

@discardableResult
class func show(on view: UIView, type: PlaceholderViewType!, title: String!, tapedColsure: ViewTapedClosure) -> PlaceholderView {
    // ...
}

这样在调用函数的时候即使不加上 let _ 也不会出现⚠️了:

PlaceholderView.show(on: tableView, type: .noData, title: "无数据") {
    print("点击占位图")
}

你可能感兴趣的