MST

星途 面试题库

面试题:Objective-C枚举与位运算结合实现权限管理

假设你正在开发一个iOS应用,需要对用户的不同操作进行权限管理,比如读取文件、写入文件、删除文件等操作权限。请使用Objective-C的枚举结合位运算来设计一个权限管理系统,要求写出相关的枚举定义、权限设置和判断的代码,并说明如何进行权限的组合与检查。
43.0万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 枚举定义
typedef NS_OPTIONS(NSUInteger, FilePermission) {
    FilePermissionRead = 1 << 0, // 读取文件权限,二进制为 0001
    FilePermissionWrite = 1 << 1, // 写入文件权限,二进制为 0010
    FilePermissionDelete = 1 << 2 // 删除文件权限,二进制为 0100
};
  1. 权限设置
FilePermission userPermissions = FilePermissionRead | FilePermissionWrite;

这里通过|运算符(按位或)将读取和写入权限组合起来赋给userPermissions

  1. 权限判断
BOOL hasReadPermission = (userPermissions & FilePermissionRead) == FilePermissionRead;
BOOL hasDeletePermission = (userPermissions & FilePermissionDelete) == FilePermissionDelete;

这里通过&运算符(按位与)来判断用户是否具有某一项权限。如果userPermissions和特定权限(如FilePermissionRead)按位与的结果等于该特定权限,说明用户具有此权限。

  1. 权限的组合与检查说明
    • 组合:通过|运算符可以将多个权限组合在一起。例如,FilePermissionRead | FilePermissionWrite表示同时具有读取和写入权限。每个权限对应一个二进制位,通过按位或运算可以将多个权限对应的二进制位同时置为1。
    • 检查:通过&运算符进行权限检查。将用户已有的权限(如userPermissions)和要检查的特定权限(如FilePermissionRead)进行按位与运算,如果结果等于要检查的特定权限,说明用户具有该权限。这是因为按位与运算只有当两个对应二进制位都为1时结果才为1,如果用户具有该权限,按位与后特定权限对应的二进制位仍为1,结果就等于该特定权限。