小编Luc*_*ien的帖子

如何枚举String类型的枚举?

enum Suit: String {
    case spades = "?"
    case hearts = "?"
    case diamonds = "?"
    case clubs = "?"
}
Run Code Online (Sandbox Code Playgroud)

例如,我该怎么做:

for suit in Suit {
    // do something with suit
    print(suit.rawValue)
}
Run Code Online (Sandbox Code Playgroud)

结果示例:

?
?
?
?
Run Code Online (Sandbox Code Playgroud)

string enums enumerate swift

510
推荐指数
17
解决办法
22万
查看次数

NSNull处理NSManagedObject属性值

我正在为我的属性设置值NSManagedObject,这些值NSDictionary来自JSON文件中的正确序列化.我的问题是,当某个值是[NSNull null],我不能直接分配给属性:

    fight.winnerID = [dict objectForKey:@"winner"];
Run Code Online (Sandbox Code Playgroud)

这引发了一个 NSInvalidArgumentException

"winnerID"; desired type = NSString; given type = NSNull; value = <null>;
Run Code Online (Sandbox Code Playgroud)

我可以轻松检查值[NSNull null]并指定nil:

fight.winnerID = [dict objectForKey:@"winner"] == [NSNull null] ? nil : [dict objectForKey:@"winner"];
Run Code Online (Sandbox Code Playgroud)

但我认为这不是很优雅,而且要设置很多属性会变得混乱.

此外,在处理NSNumber属性时,这会变得更难:

fight.round = [NSNumber numberWithUnsignedInteger:[[dict valueForKey:@"round"] unsignedIntegerValue]]
Run Code Online (Sandbox Code Playgroud)

现在NSInvalidArgumentException是:

[NSNull unsignedIntegerValue]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我必须[dict valueForKey:@"round"]在制作NSUInteger它的价值之前进行治疗.一线解决方案消失了.

我尝试创建一个@try @catch块,但只要捕获到第一个值,它就会跳转整个@try块,并忽略下一个属性.

是否有更好的方法来处理[NSNull null]或者使这个完全不同但更容易?

parsing json objective-c nsmanagedobject nsnull

35
推荐指数
2
解决办法
8359
查看次数

iOS停止向用户询问照片库权限

iOS不再要求用户提供照片库权限.即使我从设备中删除了应用程序.这也发生在模拟器上.

switch ([ALAssetsLibrary authorizationStatus])
{
    case ALAuthorizationStatusAuthorized:
        RPMLog(@"authorized");
        break;
    case ALAuthorizationStatusDenied:
        RPMLog(@"denied");
        break;
    case ALAuthorizationStatusNotDetermined:
        RPMLog(@"not determined");
        break;
    case ALAuthorizationStatusRestricted:
        RPMLog(@"restricted");
        break;
}
Run Code Online (Sandbox Code Playgroud)

我第一次安装应用程序时已经获得授权.在此之前,没有其他事件或屏幕要求照片触发用户提示.

然后我在SavedPhotos中请求numberOfAssets并在没有访问提示的情况下获取它:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

    if (!group) return;

    UIActionSheet *actionSheet = nil;
    if (([group numberOfAssets] > 0))
    {
        actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Use last photo taken", nil), NSLocalizedString(@"Choose existing", nil), nil];
    }
    else
    {
        actionSheet = …
Run Code Online (Sandbox Code Playgroud)

objective-c ios alassetslibrary

21
推荐指数
2
解决办法
9726
查看次数

如何过滤 llvm-cov 代码覆盖率报告中的文件?

来自llvm-cov 文档

llvm-cov show [options] -instr-profile PROFILE BIN [-object BIN,...] [[-object BIN]] [SOURCES]

llvm-cov show 命令使用配置文件数据 PROFILE 逐行显示二进制文件 BIN 的覆盖范围。可以选择对其进行过滤以仅显示 SOURCES 中列出的文件的覆盖范围。

我正在使用以下命令:

xcrun llvm-cov show -instr-profile "${PROFDATA}" "${BINARY}" codecov_source_files > Coverage.report

codecov_source_files带有这一行的文件在哪里:

*Router.swift

所以基本上我想要的是报告只包含带有后缀的文件: Router.swift

但是我得到了一个包含项目中所有类的 Coverage.report。

我错过了什么?

bash xcode code-coverage llvm-cov

4
推荐指数
1
解决办法
3258
查看次数