-
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
- 类似于OC的
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头文件
- 设置桥接文件的路径,如图
网友评论