如果函数是相似的,Swift如何决定执行哪个函数?
发布时间:2020-12-14 04:25:45 所属栏目:百科 来源:网络整理
导读:像下面的两个函数一样,Swift首先执行哪个函数? 有它的模式吗? 因为我遇到了两个比这更复杂的功能.它首先执行“Any”,无论我对它们做什么顺序(因为我假设它从内存地址执行但似乎没有). 有人说由于其更广泛的结构或类,它将执行“任何”(在我的另一种情况下).
像下面的两个函数一样,Swift首先执行哪个函数?
有它的模式吗? 因为我遇到了两个比这更复杂的功能.它首先执行“Any”,无论我对它们做什么顺序(因为我假设它从内存地址执行但似乎没有). 有人说由于其更广泛的结构或类,它将执行“任何”(在我的另一种情况下).但下面的例子说明了相反的情况. 想知道为什么以及如何发生这种情况或者我能在哪里得到答案. import UIKit func add(_ x: Int,_ y: Any) -> Int { return 3 } func add(_ a: Int,_ b: Int) -> Int { return 1 } print(add(2,3)) // "1n" print(add(2,"3")) // "3n" 这是我的另一个案例: 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可以匹配任何类型,因此匹配.所以一个人被召唤. 除此之外还有更多内容,但这对你的问题来说已经足够概括了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |