美文网首页Swift学习
swift-基础-一些OC与Swift的对照

swift-基础-一些OC与Swift的对照

作者: 埃林的奶酪 | 来源:发表于2016-08-15 12:33 被阅读19次
    • OC中的dealloc--Swift中的deinit。对象释放的时候会调用

    • Swift中如果文件在同一个命名空间下,是不需要导入头文件的

      • 同一个命名空间可以理解为同一个工程
      • 命名空间(默认是项目名称)可以修改,build setting中搜索product name,修改名称(打印对象的时候会体现出来,默认是项目名称)
    • OC中用#pragra mark来分隔,Swift用//MARK: - xxx

    • Swift的强转格式

      • CGFloat(childViewControllers.count)
      • (view as! HomeVisitorView).startRotation()
    • 关于self:

      • Swift中一般不用也不推荐写self
      • 一般只有需要区分两个变量(比如self.name = name),或者在闭包中访问外界属性才需要加上self。

    枚举

    • swift枚举标准格式
    public enum SVProgressHUDStyle : Int {
        
        case Light 
        case Dark 
        case Custom 
    }
    
    • 选择附加参数,如果不需要参数,如下这么写
      • 类似于OC的kNilOptions
            UIView.animateWithDuration(2.0, delay: 0.0, usingSpringWithDamping: 0.7, initialSpringVelocity: 5, options:
    UIViewAnimationOptions.init(rawValue: 0), animations: {
                self.startButton.transform = CGAffineTransformIdentity
            }) { (_) in
                
            }
    
    • 传入多个枚举
            UIRectCorner corners = UIRectCornerTopRight | UIRectCornerBottomRight | UIRectCornerBottomLeft;
            //create path
            UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corners cornerRadii:radii];
    
            let corner = UIRectCorner.TopLeft.rawValue | UIRectCorner.TopRight.rawValue | UIRectCorner.BottomLeft.rawValue
            UIBezierPath(roundedRect: rect, byRoundingCorners: UIRectCorner(rawValue: corner), cornerRadii: size)
    

    代理

    class ComposePhotoCell: UICollectionViewCell {
        var delegate: ComposePhotoCellDelegate?
        
    }
    
    protocol ComposePhotoCellDelegate {
        func composePhotoCellAddPhotoClick(cell: ComposePhotoCell) -> Void
    }
    
    • 遵守协议:OC中用尖括号,Swift直接用逗号隔开就可以了
    • Swift中的扩展:提倡把tableView的数据源和代理放到扩展中,这样也不用遵守协议
    extension ViewController: UITableViewDateSource, UITableViewDelegate
    {
        // 类似于OC中的分类,不能在这里定义属性
    }
    
    • 要设置为可选方法,需要这样
      • 注意设置了可选之后,需要判断代理是否已经实现代理方法
    @objc
    protocol ComposePhotoCellDelegate {
        optional func composePhotoCellAddPhotoClick(cell: ComposePhotoCell) -> Void
    }
    

    与OC的混编

    • 加入OC的文件:需要导入头文件,具体如下:
      • 新建一个OC文件(桥接文件),在里面import所有需要导入的OC头文件
      • 设置桥接文件的路径,如图
    QQ20160815-0.png

    相关文章

      网友评论

        本文标题:swift-基础-一些OC与Swift的对照

        本文链接:https://www.haomeiwen.com/subject/gmjusttx.html