如何在Swift中实现类似Python的可后期传参的占位符字符串格式化
Swift完全支持你需要的这种「先定义带占位符的字符串、后续再传入参数拼接」的功能,你遇到的报错均为语法写法错误导致,以下是具体实现方案:
基础用法(对应你的Python示例)
Swift 中对应 Python format() 方法的是 String(format:_:) 初始化器,用 %@ 作为字符串类型的占位符,用法如下:
let color = "purple" let size = "large" let description = "My car is the %@ one over there." print(String(format: description, color)) print(String(format: description, size))
运行输出和你的Python示例完全一致:
My car is the purple one over there.
My car is the large one over there.
你现有代码的错误修正
1. 布尔值格式化的报错修正
你第一个代码片段报错有两个原因:
%@是对象类型占位符,Bool 是值类型,需要用%B作为布尔值的占位符- 单个参数不需要加
arguments标签,直接传参即可
修正后代码:
let hilarious = false // 布尔值用 %B 占位 let joke_evaluation = "Isn't that joke so funny?! %B" print(String(format: joke_evaluation, hilarious)) // 输出:Isn't that joke so funny?! false
2. Struct用法的报错修正
你第二个代码片段的错误是:
- 声明了自定义
init但没有实现,不需要自定义初始化器可以直接删掉这行 - 调用
String(format:)时传参格式错误,且Struct需要先实例化才能访问属性
修正后代码:
struct CarStuff { let color = "red" let size = "large" let description = "The %@ car." // 删掉无实现的init声明,Swift会自动生成默认初始化器 } // 先实例化Struct let myCar = CarStuff() print(String(format: myCar.description, myCar.color)) // 输出:The red car.
扩展实现类Python的format()写法
如果你想更贴近Python的调用习惯,可以给String加个扩展,封装原生的格式化方法:
extension String { func format(_ args: CVarArg...) -> String { String(format: self, arguments: args) } }
扩展后即可实现和Python几乎一致的写法:
let description = "My car is the %@ one over there." print(description.format(color)) print(description.format(size))
常用格式符参考
%@:字符串、对象类型%d/%i:整数%f:浮点数%B:布尔值%.2f:保留两位小数的浮点数
内容的提问来源于stack exchange,提问作者Texian
相关产品推荐
相关产品推荐

