使用 "pointer" 时忽略 Swift 中的 "unused" 警告?

Ignore "unused" warning in Swift when use a "pointer" to func?

我知道我应该使用 @discardableResult。所以我有以下代码:

@discardableResult func someFunc() { ... }

那我就叫它:

someFunc()

但是,如果我有并使用了指向此方法的指针,那么它将不再起作用。例如:

let someFunc = self.someFunc
someFunc() //unused warning

在这种情况下是否可以避免_=someFunc()

不幸的是,discardableResult 仅适用于 method/function 声明。您可以做的是将 value-returning 函数包装在 void-returning 闭包中:

@discardableResult
func f() -> Int { return 1 }

// the type annotation here is important
let someFunc: () -> Void = { f() }

或者,编写一个“擦除”return 类型函数的函数:

func discardResult<R>(_ f: @escaping () -> R) -> (() -> Void) {
    { _ = f() }
}

let someFunc = discardResult(f)

缺点是你需要为每个元数写一个重载:

func discardResult<T, R>(_ f: @escaping (T) -> R) -> ((T) -> Void) {
    { x in _ = f(x) }
}

func discardResult<T, U, R>(_ f: @escaping (T, U) -> R) -> ((T, U) -> Void) {
    { x, y in _ = f(x, y) }
}

func discardResult<T, U, V, R>(_ f: @escaping (T, U, V) -> R) -> ((T, U, V) -> Void) {
    { x, y, z in _ = f(x, y, z) }
}

// and so on