Swift中四个String init(describing: Subject)初始化方法的差异疑问
四个
String init(describing:)初始化方法的差异 这四个方法核心都是生成目标对象/类型的描述字符串,差异主要体现在参数类型和求值时机上:
init(describing subject: Any)
直接传入任意类型的实例,生成该实例的描述字符串。比如传入5会得到"5",传入自定义类实例时,默认返回类名加内存地址格式的字符串。init(describing subject: @autoclosure () -> Any)
参数是自动闭包,会延迟执行传入的表达式。如果生成描述的逻辑比较耗时,或者某些场景下不需要实际生成字符串,用这个版本可以避免不必要的计算。比如String(describing: heavyComputation()),只有当确实需要生成字符串时,heavyComputation()才会被调用。init(describing subject: Any.Type)
传入类型本身(而非实例),生成该类型的名称字符串。比如传入String.self会得到"String",传入自定义类Person.self会得到"Person"。init(describing subject: @autoclosure () -> Any.Type)
自动闭包版本的类型描述方法,延迟执行获取类型的逻辑。适合动态获取类型且获取过程有开销的场景,比如需要根据条件返回不同类型时,用这个版本延迟类型的获取操作。
内容的提问来源于stack exchange,提问作者cluster1
相关产品推荐
相关产品推荐

