swift - 如何在 Swift 中检查/谓词函数类型?

标签 swift types functional-programming swift3

例如:

func f(x: Int) -> Int {
    return x
}


func h(f: @escaping (Int) -> Any) {
    if (f is (Int) -> Int) {
        print(f(1))
    } else {
        print("invalid")
    }
}


h(f: f)

我希望它打印出 1 但它实际上打印出 invalid

最佳答案

有一个使用泛型的解决方法:

func intF(x: Int) -> Int {
    return x
}

func stringF(x: Int) -> String {
    return "\(x)"
}

func h<T>(f: (Int) -> T) {
    if (T.self == Int.self) {
        print(f(1))
    } else {
        print("invalid")
    }
}

h(f: intF)    // prints: 1
h(f: stringF) // prints: invalid

关于swift - 如何在 Swift 中检查/谓词函数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41409543/

相关文章:

scala - 将类型与数据构造函数关联起来的 ADT 编码存在哪些问题? (例如 Scala。)

f# - OCaml 中的 IEnumerable<T>

ios - textFieldShouldEndEditing 故障?

ios - 来自 iTC 的无效 bundle 错误,无法提交应用程序 - 因为 4 个 swift dylibs 无法嵌入

scala - 描述一个计算

javascript - 如何在流程中使用带有泛型的对象休息?

types - SML 类型系统的正式名称是什么?

ios - 将 objective-c 调用转换为 swift

ios - @IBDesignable 不适用于 iOS swift 3

reactjs - TypeScript 错误类型 '{}' 缺少类型中的以下属性