面试题答案
一键面试以下以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
方法返回权限描述字符串,并进行了调用测试。