MST
星途 面试题库

面试题:Swift反射机制与动态类型的复杂应用

在Swift中,假设你有一个包含不同类型元素的数组,如何利用反射机制和动态类型来遍历数组并对不同类型的元素执行不同的操作?请给出具体实现代码,并解释实现思路。
48.2万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用Mirror来反射数组,获取数组的元素。
  2. 通过type(of:)获取元素的实际类型,根据不同类型执行不同操作。

具体实现代码

let mixedArray: [Any] = [1, "Hello", 3.14, true]

for element in mixedArray {
    let mirror = Mirror(reflecting: element)
    switch mirror.displayStyle {
    case.some(.collection):
        print("这是一个集合类型")
    case.some(.optional):
        print("这是一个可选类型")
    default:
        let type = type(of: element)
        if type == Int.self {
            let intValue = element as! Int
            print("这是一个整数: \(intValue)")
        } else if type == String.self {
            let stringValue = element as! String
            print("这是一个字符串: \(stringValue)")
        } else if type == Double.self {
            let doubleValue = element as! Double
            print("这是一个双精度浮点数: \(doubleValue)")
        } else if type == Bool.self {
            let boolValue = element as! Bool
            print("这是一个布尔值: \(boolValue)")
        } else {
            print("未知类型: \(type)")
        }
    }
}

上述代码中,首先定义了一个包含不同类型元素的数组mixedArray。然后通过for - in循环遍历数组,对于每个元素,利用Mirror反射获取其显示风格,根据不同的显示风格进行一些通用处理,再通过type(of:)获取具体类型并进行特定类型的操作。例如,如果是Int类型,就转换为Int并打印;如果是String类型,就转换为String并打印等。