使用 "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
我知道我应该使用 @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