如果我有一个文件,我可以通过执行类似以下的操作来获取图标:
NSImage *iconImage = [[NSWorkspace sharedWorkspace] iconForFile: @"myFile.png"];
但如果我只想获取特定文件类型的图标(例如与png文件相关联的图标,而不需要已存在的“myFile.png”),我不确定该如何做到这一点。
非常感谢您的建议!
如果我有一个文件,我可以通过执行类似以下的操作来获取图标:
NSImage *iconImage = [[NSWorkspace sharedWorkspace] iconForFile: @"myFile.png"];
但如果我只想获取特定文件类型的图标(例如与png文件相关联的图标,而不需要已存在的“myFile.png”),我不确定该如何做到这一点。
非常感谢您的建议!
NSString *fileName = @"lemur.jpg"; // generic path to some file
CFStringRef fileExtension = (__bridge CFStringRef)[fileName pathExtension];
CFStringRef fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, NULL);
NSImage *image = [[NSWorkspace sharedWorkspace]iconForFileType:(__bridge NSString *)fileUTI];
这是Swift 5版本的Dave DeLong的最初回答:
icon(forFile:)
Returns an image containing the icon for the specified file.
Declaration
func icon(forFile fullPath: String) -> NSImage
Parameters
fullPath
- The full path to the file.
icon(forFileType:)
Returns an image containing the icon for files of the specified type.
Declaration
func icon(forFileType fileType: String) -> NSImage
Parameters
fileType
- The file type, which may be either a filename extension, an encoded HFS file type, or a universal type identifier (UTI).
这是 PetrV的答案 的 Swift 5 版本:
public extension NSWorkspace {
/// Returns an image containing the icon for files of the same type as the file at the specified path.
///
/// - Parameter filePath: The full path to the file.
/// - Returns: The icon associated with files of the same type as the file at the given path.
func icon(forFileTypeAtSamplePath filePath: String) -> NSImage? {
let fileExtension = URL(fileURLWithPath: filePath).pathExtension
guard
let unmanagedFileUti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
fileExtension as CFString, nil),
let fileUti = unmanagedFileUti.takeRetainedValue() as String?
else {
assertionFailure("Should've gotten a UTI for \(fileExtension)")
return nil
}
return NSWorkspace.shared.icon(forFileType: fileUti)
}
}
NSWorkspace.sharedWorkspace().iconForFileType("txt")
- Leslie Godwin