为什么使用T!而不是T作为函数参数和返回类型? [重复]

问题描述 投票:2回答:1

此问题已经在这里有了答案:

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

例如

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

为什么不只是

func evaluateScript(_ script: String) -> JSValue
swift javascriptcore
1个回答
2
投票

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

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

同时,由您自行检查文档以确保返回值在直接使用前不能为零。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.