美文网首页
Swift问题汇总

Swift问题汇总

作者: FunkyRay | 来源:发表于2017-11-10 11:36 被阅读28次
    1.在Swift工程中引入动态库,需要添加到Embedded Binaries中,否则会报错;
    2.调用有返回值的函数时如果不使用返回值,编译器会发出警告。在该函数前面加上@discardableResult关键字可以消除该警告;
    3.Swift 4.0 使用KVC字典转模型时候需要加上@objcMembers关键字才可以有效;
    4.在Swift开发中,优先使用let定义常量,如果需要修改再使用变量;
    5.枚举中的Int类型可以自动赋值数字,其他类型不可以;
    6.类中定义类方法用class修饰,协议中定义类方法用static修饰;
    7.Swift中单例的写法:
    static let shareInstance : NetworkTools = NetworkTools()
    
    8.关于Swift访问权限
    • internal 内部的:默认情况下所有的类、属性、方法的访问权限都是internal,在本模块(项目、包、target)中可以访问
    • private 私有的:只有在本类中可以访问
    • open 公开的:可以跨模块(项目、包、target)都是可以访问的
    • fileprivate: Swift 3.0 才有的,只有在本文件中可以访问
    9.Swift中字符串的优点:
    • String 是一个结构体,性能更高,NSString 是一个OC对象,性能略差
    • String 支持直接遍历
    • 可以进行 StringNSString 之间的无缝转换
    • 字符串长拼接可以直接相加
    10.Swift中类的注意点:
    • 定义类中初始化时必须要给属性赋值,而结构体不用
    • 一般不用传参数的函数可以写成计算属性来使用
    • 在类中可以直接写属性名字调用,不用写self.
    • 定义类属性加上关键字static即可,并且类属性只能通过类来调用
    • 进行属性监听的函数:
     willSet { // 监听属性即将发生改变:还没有改变
         print("\(newValue)--\(name)") // 打印新的值
     }
     didSet { // 监听属性已经发生改变:已经改变
         print("\(oldValue)--\(name)") // 打印旧值
     }
    
    • Swift中析构函数相当于OC中的delloc方法:
      deinit {
        print("该类被释放")
      }
    
    11.Swift中协议的注意点:
    • 协议中的方法默认都是必须实现的,加上@objc optional表示方法是可以不实现的
    • 加上class说明只能被类使用该协议:
    @objc protocol sprotProtocol : class {
       @objc optional func playFootball()
    }
    
    • 继承可以和协议一起写在 : 后面:
    class smallStudent: NSObject, sprotProtocol {
        
    }
    
    12.在extension中给系统的类扩充构造函数,只能扩充便利构造函数
    extension UIColor {
       convenience init(r: CGFloat, g: CGFloat, b: CGFloat, alpha: CGFloat = 1.0) {
          self.init(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: alpha)
       }
    }
    
    13.OC和Swift混编的方法:
    • Swift中引用OC的文件,会默认生成一个工程名-Bridging-Header.h的桥接文件,在其中用OC语法引用需要的类就可以了。
    • 也可以自定义一个.h文件,并添加到该路径中Build Settings -> Swift Compiler -> Objective-C Bridging Header
    • OC中引用Swift的文件,只需要引入工程名-Swift.h的头文件,就可以使用了。
    • 该头文件的路径可以在Build Settings -> Swift Compiler -> Objective-C Generated Interface Header Name中查看。
    14.关于Swift中使用CoreFoundation 数据类型:

    使用了"类型重映射"机制, 转换成为了能够自动管理内存的对象, 不需要我们手动释放

    相关文章

      网友评论

          本文标题:Swift问题汇总

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