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) 我正在为我的属性设置值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]或者使这个完全不同但更容易?
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) 来自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。
我错过了什么?