Swift问题汇总

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问题汇总)