首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSWorkspace‘图标(forFileType:’返回默认图标

NSWorkspace‘图标(forFileType:’返回默认图标
EN

Stack Overflow用户
提问于 2020-04-01 06:23:51
回答 2查看 257关注 0票数 1

用于NSWorkspace.shared.icon(forFileType:状态的docs:

代码语言:javascript
复制
/* 
 * Get the icon for a given file type.
 *
 * The file type may be a filename extension, or a HFS code encoded via NSFileTypeForHFSTypeCode, or a Universal Type Identifier (UTI).
 *
 * Returns a default icon if the operation fails.
 *
 */

// Swift
open func icon(forFileType fileType: String) -> NSImage

// Objective-C
- (NSImage *)iconForFileType:(NSString *)fileType;

注意:

如果操作失败,

将返回默认图标。

如何判断操作是否“失败”并返回默认图标?

是否有一种方法可以确定您是否获得了默认图标,而无需进行昂贵的图像或数据比较?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-10 15:49:02

快速测试之后,看起来当iconForFileType失败时,每次都会返回相同的指针。这是有意义的,因为它可能只是对“无文件类型”映像的单一共享引用。

因此,您可以用已知的未知文件类型获取该指针一次:

代码语言:javascript
复制
// Do this once, at program startup for example, and keep the reference
NSImage* x = [[NSWorkspace sharedWorkspace] iconForFileType:@".this_is_not_a_file_type"];

然后,只需进行指针比较:

代码语言:javascript
复制
NSImage* y = [[NSWorkspace sharedWorkspace] iconForFileType:@".xxx"];
NSLog(@"%p %p", x, y);

if (x == y)
    // `iconForFileType` failed
票数 3
EN

Stack Overflow用户

发布于 2020-04-12 01:21:02

如果NSWorkspace操作失败,则nil扩展返回icon(forFileType:

代码语言:javascript
复制
extension NSWorkspace {

    func iconOptional(forFileType fileType: String) -> NSImage? {
        let icon = self.icon(forFileType: fileType)
        let iconDefault = self.icon(forFileType: "") // "Returns a default icon if the operation fails."
        return icon === iconDefault ? nil : icon
    }

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60964798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档