如果函数是相似的,Swift如何决定执行哪个函数?

如果函数是相似的,Swift如何决定执行哪个函数?,第1张

概述像下面的两个函数一样, Swift首先执行哪个函数? 有它的模式吗? 因为我遇到了两个比这更复杂的功能.它首先执行“Any”,无论我对它们做什么顺序(因为我假设它从内存地址执行但似乎没有). 有人说由于其更广泛的结构或类,它将执行“任何”(在我的另一种情况下).但下面的例子说明了相反的情况. 想知道为什么以及如何发生这种情况或者我能在哪里得到答案. import UIKitfunc add(_ 像下面的两个函数一样,Swift首先执行哪个函数?

有它的模式吗?

因为我遇到了两个比这更复杂的功能.它首先执行“Any”,无论我对它们做什么顺序(因为我假设它从内存地址执行但似乎没有).

有人说由于其更广泛的结构或类,它将执行“任何”(在我的另一种情况下).但下面的例子说明了相反的情况.

想知道为什么以及如何发生这种情况或者我能在哪里得到答案.

import UIKitfunc add(_ x: Int,_ y: Any) -> Int {    return 3}func add(_ a: Int,_ b: Int) -> Int {    return 1}print(add(2,3))// "1\n"print(add(2,"3"))// "3\n"

这是我的另一个案例:

let constraint = TitleLabel.layout(.wIDth,.lessthanorEqual,122)

这是我期望执行的:

func layout(_ attribute: NSLayoutAttribute,_ relatedBy: NSLayoutRelation,_ constant: CGfloat,active: Bool = true,priority: UILayoutPriority = .init(1000)) -> NSLayoutConstraint {}

但它实际执行这个:

func layout(_ attribute: NSLayoutAttribute,_ toItem: Any?,priority: UILayoutPriority = .init(1000)) -> NSLayoutConstraint {}

如果swift选择最具体的一个,它不应该执行“float”吗?

解决方法 Swift编译器选择与您正在进行的调用匹配的函数签名.

当您使用两个Int参数调用add时,它会看到有一个带有两个Int参数的add函数,因此它调用了一个.

当您使用Int和String调用add时,它首先查找这样的函数,但没有一个函数.然后它看到有一个Int和Any.由于Any可以匹配任何类型,因此匹配.所以一个人被召唤.

除此之外还有更多内容,但这对你的问题来说已经足够概括了.

总结

以上是内存溢出为你收集整理的如果函数是相似的,Swift如何决定执行哪个函数?全部内容,希望文章能够帮你解决如果函数是相似的,Swift如何决定执行哪个函数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/999754.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存