面试题答案
一键面试-
定义自定义运算符:
- 首先在Swift中定义一个自定义运算符。例如,定义一个用于比较的自定义运算符
≺
。
// 定义自定义运算符 infix operator ≺ : ComparisonPrecedence
- 首先在Swift中定义一个自定义运算符。例如,定义一个用于比较的自定义运算符
-
设计泛型函数:
- 定义一个泛型函数
compare
,接受两个泛型参数a
和b
,并使用自定义运算符≺
进行比较。
func compare<T: Comparable>(a: T, b: T) -> Bool { return a ≺ b }
- 这里使用了类型约束
T: Comparable
,确保泛型类型T
遵守Comparable
协议,这样才能使用比较操作。
- 定义一个泛型函数
-
处理运算符重载:
- 对于自定义运算符
≺
,需要为不同的类型进行重载。例如,为Int
类型重载该运算符:
func ≺(lhs: Int, rhs: Int) -> Bool { return lhs < rhs }
- 对于其他类型,如
String
,也可以进行类似的重载:
func ≺(lhs: String, rhs: String) -> Bool { return lhs < rhs }
- 对于自定义运算符
-
泛型表达式的类型推导:
- 在调用泛型函数
compare
时,Swift编译器会根据传入的参数类型进行类型推导。例如:
let result1 = compare(a: 5, b: 10) let result2 = compare(a: "apple", b: "banana")
- 在
compare(a: 5, b: 10)
调用中,编译器根据传入的Int
类型参数,推导出泛型类型T
为Int
。同样,在compare(a: "apple", b: "banana")
调用中,推导出T
为String
。因为Int
和String
都遵守Comparable
协议,并且都有对应的≺
运算符重载,所以函数能够正确工作。
- 在调用泛型函数
通过上述步骤,我们设计了一个满足要求的Swift泛型函数,处理了类型约束、运算符重载以及泛型表达式的类型推导等问题。