这个 String 格式说明符的相关性是什么?
What is the relevance of this String format specifier?
我正在尝试了解我最近遇到的一些代码。
在此处 问题的回答中,作者在循环访问 documentDirectory 中的文件时使用了带有格式说明符的字符串。谁能阐明 %@/%@
实际在做什么?
for fileName in fileNames {
let tempPath = String(format: "%@/%@", path, fileName)
// Check for specific file which you don't want to delete. For me .sqlite files
if !tempPath.contains(".sql") {
try fileManager.removeItem(atPath: tempPath)
}
}
阅读 Apple documentation archive for Formatting Basics 我遇到了这个:
In format strings, a ‘%’ character announces a placeholder for a value, with the characters that follow determining the kind of value expected and how to format it. For example, a format string of "%d houses" expects an integer value to be substituted for the format expression '%d'. NSString supports the format characters defined for the ANSI C functionprintf(), plus ‘@’ for any object.
那么 %@/%@
到底在做什么?
%@
类似于 %d
或类似的东西。这是Swift.
中字符串插值的方式
确切地说,%@
是对象的占位符 - 在 Objective-C 中大量使用。由于 NSString *
是对象(现在它只是字符串),它被用来将 NSString *
插入另一个 NSString *
。
还给定的代码刚刚被重写 objective-c 类似
的代码
NSString *tempPath = [NSString stringWithFormat:@"%@/%@", path, filename];
可以改写成swift:
let tempPath = path + "/" + fileName
此外,给定路径 = "Test" 和文件名 = "great" 将给出输出 Test/great.
请注意:%@ 既好又危险。您可以将 UITableView 和 String 放入其中。它将使用描述 属性 插入字符串。
每个格式说明符都被以下参数之一替换(通常顺序相同,尽管可以用位置参数控制)。因此,在您的情况下,第一个 %@
被 path
替换,第二个 %@
被 fileName
替换。示例:
let path = "/path/to/dir"
let fileName = "foo.txt"
let tempPath = String(format: "%@/%@", path, fileName)
print(tempPath) // /path/to/dir/foo.txt
构建文件名和路径的首选方法是使用相应的 URL
方法而不是字符串操作。示例:
let pathURL = URL(fileURLWithPath: path)
let tempURL = pathURL.appendingPathComponent(fileName)
if tempURL.pathExtension != "sql" {
try FileManager.default.removeItem(at: tempURL)
}
我正在尝试了解我最近遇到的一些代码。
在此处 %@/%@
实际在做什么?
for fileName in fileNames {
let tempPath = String(format: "%@/%@", path, fileName)
// Check for specific file which you don't want to delete. For me .sqlite files
if !tempPath.contains(".sql") {
try fileManager.removeItem(atPath: tempPath)
}
}
阅读 Apple documentation archive for Formatting Basics 我遇到了这个:
In format strings, a ‘%’ character announces a placeholder for a value, with the characters that follow determining the kind of value expected and how to format it. For example, a format string of "%d houses" expects an integer value to be substituted for the format expression '%d'. NSString supports the format characters defined for the ANSI C functionprintf(), plus ‘@’ for any object.
那么 %@/%@
到底在做什么?
%@
类似于 %d
或类似的东西。这是Swift.
确切地说,%@
是对象的占位符 - 在 Objective-C 中大量使用。由于 NSString *
是对象(现在它只是字符串),它被用来将 NSString *
插入另一个 NSString *
。
还给定的代码刚刚被重写 objective-c 类似
的代码NSString *tempPath = [NSString stringWithFormat:@"%@/%@", path, filename];
可以改写成swift:
let tempPath = path + "/" + fileName
此外,给定路径 = "Test" 和文件名 = "great" 将给出输出 Test/great.
请注意:%@ 既好又危险。您可以将 UITableView 和 String 放入其中。它将使用描述 属性 插入字符串。
每个格式说明符都被以下参数之一替换(通常顺序相同,尽管可以用位置参数控制)。因此,在您的情况下,第一个 %@
被 path
替换,第二个 %@
被 fileName
替换。示例:
let path = "/path/to/dir"
let fileName = "foo.txt"
let tempPath = String(format: "%@/%@", path, fileName)
print(tempPath) // /path/to/dir/foo.txt
构建文件名和路径的首选方法是使用相应的 URL
方法而不是字符串操作。示例:
let pathURL = URL(fileURLWithPath: path)
let tempURL = pathURL.appendingPathComponent(fileName)
if tempURL.pathExtension != "sql" {
try FileManager.default.removeItem(at: tempURL)
}