|
|
1
2
实际上,我发现在这两种情况下都调用了变体2。 首先为Objective-C接口生成Swift接口。你会发现:
我们现在已经从故事中删除了Objective-C组件,可以在测试中使用以下方法:
如果我们打电话
|
|
2
2
在matts answer中,他分享了自己的经验,即编译器将解决对该方法的第二个Objective-C变体(具有
切换两个方法中第一个参数的可空性,行为就会发生变化,偏向于第一个变量。同样,如果两种格式副本都使用相同的可空性,那么将再次使用第一种变体。考虑:
这转化为以下Swift界面:
现在,两个Swift调用都将调用第一个变量,而不是第二个变量:
在您的示例中(第一个变量使第一个参数为空,但第二个变量不为空),它正在解析为第二个变量,因为我们传递了一个非可选字符串。 考虑到(希望如此)第一个变量只是第二个变量的Objective-C便利方法,调用哪一个可能无关紧要,但故事的寓意是,对适当的Objective-C方法的解决取决于非常微妙的考虑,这些考虑可能不是一目了然的。
冒着过早优化的风险,如果你真的关心确保Swift总是调用第二个Objective-C变量,而不管这两个变量中第一个参数的可空性/可选性,你可以通过
然后手动声明自己的显式Swift接口:
这将始终调用Objective-C方法的第二种变体。这消除了方法解析行为,这些行为在其他情况下可能并不明显,从而使您的意图变得明确。 |
|
|
Tom · SwiftUI.sheet导致背景白色闪烁 1 年前 |
|
|
Danil · 种子/填充核心数据的最佳实践?[关闭] 1 年前 |
|
|
Robin · LazyVGrid项目预计不会击中测试区域 1 年前 |
|
|
Saurabh Saini · 结构下标 1 年前 |
|
|
Alex Smith · 移动到下一个视图控制器后如何显示警报? 1 年前 |