형식 유추 엔진은 Ints의 비트 너비를 알지 못합니다. 그것은 인트가 숫자라는 것을 알지 못합니다. 엔진은 유형이 구현되는 방식의 "제한"또는 "좁음"에 대해 아무것도 모릅니다. 유형이 유형과 유형 ("ISA"relationships)으로서 서로 어떻게 관련되는지를 알고, 제공 한 유형 변수에 어떤 것이 연결될 수 있는지 파악하여 제한 조건 문제점을 해결하려고합니다.
대신 유형 유추 엔진이 선택되어있는 +
버전에서 선택됩니다. Int 기반의 +
함수 중 어느 것도 적용되지 않습니다. 그들은 양식의 모든 것 :
public func +(lhs: Int8, rhs: Int8) -> Int8
을 그리고 이것은 양쪽에 Int8
이 없습니다. 따라서 가장 구체적인 다음 항목을 선택합니다.
public func +<T : Strideable>(lhs: T, rhs: T.Stride) -> T
왜이 제품입니까? Int8
은 SignedInteger
입니다. SignedInteger
구현 Strideable
이 방법 : 타입 추론으로
public protocol Strideable : Comparable {
associatedtype Stride : SignedNumber
public func distance(to other: Self) -> Self.Stride
public func advanced(by n: Self.Stride) -> Self
}
extension SignedInteger {
public func distance(to other: Self) -> Int
public func advanced(by n: Int) -> Self
}
우리는 Stride
가 Int
인 것을 알 수있다. 그래서 우리의 함수는 다음과 같습니다 :
public func +(lhs: Int8, rhs: Int) -> Int8
물론 런타임에 오버플로가됩니다.
현재 Swift가 선택한 기능을 확인하는 가장 좋은 방법은 +
기호를 Option 키를 누른 상태로 클릭하는 것입니다. 사용중인 유형을 알려줍니다.
"BTW, Swift가 선택한 기능을 알아내는 가장 좋은 방법은 + 기호를 Option- 클릭하는 것입니다."고맙습니다. – SLN