没有扩展协议,但仍然可以工作[关闭]

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

在遵循 Twostraws 的教程时,我使用钳制方法创建了 Int 的扩展。但是,当我在 UInt64 上应用此扩展方法时,它仍然有效。有人可以解释为什么吗?原始教程在这里:协议扩展

extension Int{
    func clamp(high: Int, low: Int)->Int{
        if self > high {
            return high
        }
        else if self < low{
            return low
        }
        return self
    }
}

let bigNum: UInt64 = 5
5.clamp(high: 10, low: 0)
swift
1个回答
1
投票

你不是在这里调用

UInt64
,要做到这一点,你必须这样写:

bigNum.clamp(high: 10, low: 0)

这应该会产生编译器错误。

当调用

5.clamp(...)
时,你实际上实例化了 new
Int
,因为没有任何上下文的
5
是一个 Integer Literal

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