设为首页 加入收藏

TOP

Swift 3 新特性和迁移详解(二)
2017-10-10 12:14:06 】 浏览:8630
Tags:Swift 特性 迁移 详解
左右就可以删完了,然后直接拖到项目中就可以了~

  • Snap 其实只要拖进去就好了,暂时不需要修改什么。

  • // 其实都是 !os(watchOS) 这个宏下面的
    #if !os(watchOS)
    
    @discardableResult
    public func stream(withHostName hostName: String, port: Int) -> StreamRequest {
        return SessionManager.default.stream(withHostName: hostName, port: port)
    }
    
    @discardableResult
    public func stream(with netService: NetService) -> StreamRequest {
        return SessionManager.default.stream(with: netService)
    }
    
    #endif

    @escaping

    • 这个是我在适配中最蛋疼的坑

    • 首先在看swift-evolution只是了解到@escaping 必须显示声明。但是不知道@escaping的闭包,在函数体内无法再修改。

    let pedonmeter:CMPedometer = CMPedometer()
    
        func getPedometerDataFromDate(_ datet:Date?, withHandler handler: @escaping (CMPedometerData?, Error?) -> ()){
    
    
            // 编译错误
            pedonmeter.queryPedometerDataFromDate(startTime, toDate:endTime, withHandler: { (pedometerData:CMPedometerData?, error:NSError?) -> Void in
    
                guard let pedometerData = pedometerData else { return }
                handler(pedometerData, error)
    
                // 做一些事情
    
            })
            // 最后逼不得已只能不修改了,函数外面就做一些事情了
            pedonmeter.queryPedometerData(from: startTime, to: endTime, withHandler:  handler as! CMPedometerHandler)
    
        }

    Result of call to 'funtion' is unused

    • 这其实不是一个 编译错误,但是这个警告最开始让我有点懵逼.返回值不用难道要我都修改一下?

    • 最开始其实我是这么修改的 let _ = funtion(),但是后面在看SE-0047的时候发现@discardableResult也是可以达到这个效果的。

    Date && NSDate

    • 因为有个项目中使用的 DateTools 这个工具。它有一个 NSDate + Tools 的分类。

    • 但是在写 Swift 3 的过程中我发现如果变量是 Date 类型的无法使用NSDate + Tools 这个类型,必须显示声明date as NSDate 这样才能调用分类的一些个方法。

    • 这个让使用 OC 的库的时候会感觉十分不舒服,毕竟很多 NS 的前缀去掉了。所有都显示声明太不友好了。

    CAAnimationDelegate

    • 这个其实好像是 Xcode 8 的修改。因为之前CAAnimationDelegate 是一个分类。大概声明如下:

    @interface NSObject (CAAnimationDelegate)- (void)animationDidStart:(CAAnimation *)anim;
    - 
    - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;@end
    • 之前是在 vc 中只要重写一下 animationDidStart 函数就可以了。但是新的不行,起初以为是 Swift 3 的变化,但是其实是 Xcode 8 中的修改。将 CAAnimationDelegate 变成了一个协议。我感觉这个修改是为了适配   Swift 3 ?变化如下:

    @protocol CAAnimationDelegate @optional- (void)animationDidStart:(CAAnimation *)anim;
    - 
    - (void)animationDidStop:(CAAnimation *)anim fin
    首页 上一页 1 2 3 下一页 尾页 2/3/3
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇# iOS 10 适配 # 适配刷新控件 以.. 下一篇Swift泛型协议的N种用法

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目