小编Axo*_*ort的帖子

Swift - 协议扩展 - 属性默认值

假设我有以下协议:

protocol Identifiable {
    var id: Int {get}
    var name: String {get}
}
Run Code Online (Sandbox Code Playgroud)

而且我有以下结构:

struct A: Identifiable {
    var id: Int
    var name: String
}

struct B: Identifiable {
    var id: Int
    var name: String
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我必须"符合"结构A和结构B中的可识别协议.但想象一下,如果我有N个结构需要符合这个协议......我不想'复制/粘贴' '一致性(var id:Int,var name:String)

所以我创建了一个协议扩展:

extension Identifiable {
    var id: Int {
        return 0
    }

    var name: String {
        return "default"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在有了这个扩展,我可以创建一个符合Identifiable协议的结构,而不必实现这两个属性:

struct C: Identifiable {

}
Run Code Online (Sandbox Code Playgroud)

现在问题是我无法为id属性或name属性设置值:

var c: C = C()
c.id = 12 // Cannot assign to …
Run Code Online (Sandbox Code Playgroud)

ios swift protocol-oriented

55
推荐指数
2
解决办法
3万
查看次数

iOS 7 | 导航栏/工具栏按钮非常靠近状态栏

将导航栏或工具栏(故事板)拖动到视图控制器时出现问题.

UINavigationBar的:

UINavigationBar的

如上图所示,右侧按钮几乎与状态栏重叠.

使用UIToolbar它会发生相同的事情:

UIToolbar

这个视图控制器旨在用作模态,这就是我没有使用UINavigationController的原因.

在另一节我使用UINavigationController,它看起来像我期望的那样:

UINavigationController的

如何在不重叠状态栏的情况下将UINavigationBar/UIToolbar拖动到视图控制器?

uinavigationbar uitoolbar uistoryboard ios7

42
推荐指数
4
解决办法
4万
查看次数

iOS 10中的UIVisualEffectView

我提出了一个包含UIVisualEffectView的UIViewController,如下所示:

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    [self performSegueWithIdentifier:@"segueBlur" sender:nil];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"segueBlur"]) {
        ((UIViewController *)segue.destinationViewController).providesPresentationContextTransitionStyle = YES;
        ((UIViewController *)segue.destinationViewController).definesPresentationContext = YES;
        ((UIViewController *)segue.destinationViewController).modalPresentationStyle = UIModalPresentationOverFullScreen;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在使用UIModalPresentationStyleOverFullScreen,以便当出现模糊的视图控制器时,模糊将"应用"到呈现它的视图控制器的内容; segue具有Cross Dissolve过渡风格.

效果看起来像预期的那样.但是,在iOS 9中,演示比iOS 10更流畅.在iOS 10中,当视图控制器出现时,它看起来像是两步动画,而在iOS 9中,模糊立即应用.

一张图片胜过千言万语所以我上传了一段显示这种奇怪行为的视频:

UIVisualEffectView iOS 9 vs iOS 10

我的问题是:如何在iOS 10中呈现iOS 10中的视图控制器?

objective-c ios uivisualeffectview ios10 xcode8

31
推荐指数
2
解决办法
4233
查看次数

Facebook SDK 3.1 iOS:如果用户从Facebook设置中删除应用程序,则处理登录

我想在我的应用程序中加入一些Facebook集成.在这一点上,我已经设法登录,发布到朋友的墙上,检索朋友列表等等.除了一件事,一切都还好......

如果用户从您的Facebook设置/应用程序中删除应用程序 ,然后进入iOS应用程序,则代码无法识别Facebook应用程序已从用户设置中删除并假设已登录(这是问题,因为如果用户试图发布到朋友的墙上,应用程序什么都不做).

然后,用户关闭iOS应用程序并重新启动它...通过此重新启动,iOS应用程序"已修复"并检测到用户不再登录.

在用户从设置中删除Facebook应用程序之后,我无法立即检测到该时刻,以便将登录流程带给用户...

这是我的代码:

在我的应用程序的第一个场景......

if([FBSession activeSession].state == FBSessionStateCreatedTokenLoaded)
{
    NSLog(@"Logged in to Facebook");
    [self openFacebookSession];
    UIAlertView *alertDialog;

    alertDialog = [[UIAlertView alloc] initWithTitle:@"Facebook" message:@"You're already logged in to Facebook" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];

    [alertDialog show];

    [alertDialog release];
    return YES;
}
else{
    NSLog(@"Not logged in to Facebook"); //Show the login flow
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

这是openFacebookSession的代码

-(void)openFacebookSession
{
    NSArray *permissions = [[NSArray alloc] initWithObjects:
                            @"publish_stream",
                            nil];

    [FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceFriends allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { …
Run Code Online (Sandbox Code Playgroud)

facebook objective-c ios facebook-ios-sdk

10
推荐指数
2
解决办法
8584
查看次数

iOS - 是否有可能获得iPhone用户设置的背景图像?

是否可以知道(访问)哪个图像被设置为手机背景?我想在我的应用程序中将相同的图像放在UIImageView中.

提前致谢!

iphone cocoa-touch objective-c ios

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