MST

星途 面试题库

面试题:Objective-C中NS_OPTIONS在位运算场景的应用

假设你有一个NS_OPTIONS定义的枚举类型,代表文件的不同权限(读、写、执行)。编写一个方法,该方法接收一个权限掩码作为参数,返回一个字符串,字符串内容描述了该掩码所包含的具体权限。
40.6万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

以下以Objective-C语言为例实现:

#import <Foundation/Foundation.h>

// 定义文件权限枚举
typedef NS_OPTIONS(NSUInteger, FilePermissions) {
    FilePermissionRead = 1 << 0,
    FilePermissionWrite = 1 << 1,
    FilePermissionExecute = 1 << 2
};

// 方法实现
NSString *describePermissions(FilePermissions permissions) {
    NSMutableString *description = [NSMutableString string];
    if (permissions & FilePermissionRead) {
        [description appendString:@"读 "];
    }
    if (permissions & FilePermissionWrite) {
        [description appendString:@"写 "];
    }
    if (permissions & FilePermissionExecute) {
        [description appendString:@"执行 "];
    }
    if (description.length == 0) {
        [description appendString:@"无权限"];
    }
    return description;
}

你可以这样调用这个方法:

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        FilePermissions mask = FilePermissionRead | FilePermissionExecute;
        NSString *result = describePermissions(mask);
        NSLog(@"%@", result);
    }
    return 0;
}

上述代码首先定义了一个表示文件权限的NS_OPTIONS枚举类型FilePermissions,然后实现了一个describePermissions方法,该方法接收一个权限掩码参数,返回描述该掩码所包含具体权限的字符串。在main函数中进行了简单的调用测试。

如果是Swift语言,实现如下:

// 定义文件权限选项集
struct FilePermissions: OptionSet {
    let rawValue: UInt
    static let read = FilePermissions(rawValue: 1 << 0)
    static let write = FilePermissions(rawValue: 1 << 1)
    static let execute = FilePermissions(rawValue: 1 << 2)
}

// 方法实现
func describePermissions(_ permissions: FilePermissions) -> String {
    var description = ""
    if permissions.contains(.read) {
        description += "读 "
    }
    if permissions.contains(.write) {
        description += "写 "
    }
    if permissions.contains(.execute) {
        description += "执行 "
    }
    if description.isEmpty {
        description = "无权限"
    }
    return description
}

调用示例:

let mask: FilePermissions = [.read, .execute]
let result = describePermissions(mask)
print(result)

上述Swift代码定义了一个符合OptionSet协议的FilePermissions结构体来表示文件权限,实现了describePermissions方法返回权限描述字符串,并进行了调用测试。