我有以下类与字符串的私有结构,我想稍后将它们用于格式化字符串.但是,代码在运行时崩溃.
为什么是这样?是因为它被定义为静态let?
以下是剥离的代码:
class LGNotificationHandler {
private struct Strings {
static let SentImagesENG = "Sent %@ images to the event"
static let SentImagesTUR = "Etkinli?e %@ görsel gönderdi"
}
func buildNotificationString(imageCount: Int) -> String {
if imageCount == 1 {
.
.
.
} else {
// below line is giving error at run time
notificationENG = String(format: Strings.SentImagesENG, imageCount)
notificationTUR = String(format: Strings.SentImagesTUR, imageCount)
}
}
}
Run Code Online (Sandbox Code Playgroud)
rma*_*ddy 15
你忽略了提供有关崩溃的任何细节,但一个明显的问题是使用%@
格式说明符和Int
.您需要使用%d
带Int
.
Sah*_*hil 14
您需要将%@替换为%d.ImageCount是Int
值.所以使用%d而不是%@.
格式说明符:
%d - int Value
%f - float value
%ld - long value
%@ - string value and for many more.
Run Code Online (Sandbox Code Playgroud)
有关所有格式说明符,请参阅Apple Doc 格式说明符
你可以使用这个扩展
斯威夫特 5
extension String {
func format(_ arguments: CVarArg...) -> String {
let args = arguments.map {
if let arg = $0 as? Int { return String(arg) }
if let arg = $0 as? Float { return String(arg) }
if let arg = $0 as? Double { return String(arg) }
if let arg = $0 as? Int64 { return String(arg) }
if let arg = $0 as? String { return String(arg) }
if let arg = $0 as? Character { return String(arg) }
return "(null)"
} as [CVarArg]
return String.init(format: self, arguments: args)
}
}
Run Code Online (Sandbox Code Playgroud)
使用:
let txt = "My name is %@, I am %@ years old".format("Mickael", 24)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17629 次 |
最近记录: |