2

当 Xcode 以默认参数值显示函数/方法的提示时,是否有任何规则?

这就是我的意思。例如,在UIViewControllerpresent()这样签名的方法中:

func present(
    _ viewControllerToPresent: UIViewController,
    animated flag: Bool,
    completion: (() -> Void)? = nil
)

当我在 Xcode 中输入它的名称时,我只会提示完整的方法声明,包括completion参数,可以省略:

  1. 现在(viewControllerToPresent:UIViewController,动画:布尔,完成:(()-> Void)?)

但是,让我们创建present方法的副本:

func presentCopy(
    _ viewControllerToPresent: UIViewController,
    animated flag: Bool,
    completion: (() -> Void)? = nil
) {...}

这一次,Xcode 通知了该方法的两个可能版本:

  1. presentCopy(viewControllerToPresent:UIViewController,动画:布尔)

  2. presentCopy(viewControllerToPresent: UIViewController, 动画: Bool, 完成: (() -> Void)?)

这种不一致从何而来?

4

1 回答 1

4

我猜这是因为您在纯 Swift 类中定义present方法,而UIViewController在 Objective-C 类中定义方法。

在 Objective-C 中没有默认参数值的概念。

甚至相反的情况也是如此。如果您presentCopy在 Obj-C 类中访问您的方法,则方法声明将包含所有值,并且只有一个方法。

于 2017-08-08T12:32:32.313 回答