面试题答案
一键面试- 枚举定义:
typedef NS_OPTIONS(NSUInteger, FilePermission) {
FilePermissionRead = 1 << 0, // 读取文件权限,二进制为 0001
FilePermissionWrite = 1 << 1, // 写入文件权限,二进制为 0010
FilePermissionDelete = 1 << 2 // 删除文件权限,二进制为 0100
};
- 权限设置:
FilePermission userPermissions = FilePermissionRead | FilePermissionWrite;
这里通过|
运算符(按位或)将读取和写入权限组合起来赋给userPermissions
。
- 权限判断:
BOOL hasReadPermission = (userPermissions & FilePermissionRead) == FilePermissionRead;
BOOL hasDeletePermission = (userPermissions & FilePermissionDelete) == FilePermissionDelete;
这里通过&
运算符(按位与)来判断用户是否具有某一项权限。如果userPermissions
和特定权限(如FilePermissionRead
)按位与的结果等于该特定权限,说明用户具有此权限。
- 权限的组合与检查说明:
- 组合:通过
|
运算符可以将多个权限组合在一起。例如,FilePermissionRead | FilePermissionWrite
表示同时具有读取和写入权限。每个权限对应一个二进制位,通过按位或运算可以将多个权限对应的二进制位同时置为1。 - 检查:通过
&
运算符进行权限检查。将用户已有的权限(如userPermissions
)和要检查的特定权限(如FilePermissionRead
)进行按位与运算,如果结果等于要检查的特定权限,说明用户具有该权限。这是因为按位与运算只有当两个对应二进制位都为1时结果才为1,如果用户具有该权限,按位与后特定权限对应的二进制位仍为1,结果就等于该特定权限。
- 组合:通过