【问题标题】:Why use T! instead of T as function parameter and return type? [duplicate]为什么要用T!而不是 T 作为函数参数和返回类型? [复制]
【发布时间】:2019-10-27 23:30:04
【问题描述】:

在 JavaScriptCore 中,我看到大多数函数声明为 T!作为参数类型和返回类型。自从T!传入和返回时假设非nil,为什么不直接将T声明为类型?

例如

func evaluateScript(_ script: String!) -> JSValue!

为什么不直接

func evaluateScript(_ script: String) -> JSValue

【问题讨论】:

标签: swift javascriptcore


【解决方案1】:

这表示尚未对 ObjC API 进行可空性审核,并且未应用可空性注释。如果没有可空性注释,编译器不知道这些值是否是可选的。在这种情况下,默认行为是将它们全部设为 ! 类型,并将问题留给调用者(唯一可能的方法是使所有 ? 类型,这将非常不方便使用)。

当 Apple 注释标题时,! 将消失。

在此期间,您需要检查文档以确保在直接使用返回值之前不能为 nil。

在这种特殊情况下,底层 JSEvaluateScript 实际上可以返回 nil:

@result The JSValue that results from evaluating script, or NULL if an exception is thrown.

所以你确实需要检查它。编译器目前无法知道这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2016-07-22
    • 1970-01-01
    • 2018-08-22
    相关资源
    最近更新 更多