【Swift】Swift 中遇到的问题 (昨天刚开始正经使用Swift写项目,问题确实多,也希望看到文章的各位大佬多多指导)

一、Property 'var xxx' not initialized at super.init call

在调用super的init前,一定要将声明的变量进行初始化才可以调用

二、fatal error "init(coder:) has not been implemented"

如果视图使用IB或者SB构建,则无需重写其init方法,因为重写init后,就必须实现coding协议,若不实现就会报错。所以自定义IB或者SB视图的话,直接重写awakeFromNib

三、swift中的setter/getter

OC中的setter/getter使用非常方便,毕竟只是一个赋值取值的过程,不会涉及太多,而Swift中,setter被赋予了计算的任务,所以想要正常使用setter就需要我们另外声明一个变量,通过这个变量实现传递进来的参数的存储。
Swift setter中,新增了一个属性newValue,作用与OC下划线变量相同,一般的,我们将newValue赋值给我们之前声明的存储变量,在整个周期中,我们只有存储变量而不去使用计算变量

// setter/getter 代码示例
 var newModel : TEST_MODEL!
    var model : TEST_MODEL {
        set {
            self.newModel = newValue
            self.price_Label.text = newModel.image_Url
        } get {
            return self.newModel
        }
    }

四、Declaration is only valid at file scope

坑,在声明extension 不能在类的作用域中进行声明,要将其声明在类的作用域之外

五、#selector&@Selector

swift 中已经移除了@Selector这个选择器样式,取代它的是#selector,由于runtime的限制,swift4.0之后swift方法默认对OC不可见,所以需要在相应的函数前加上一个@objc

button.addTarget(self, action: #selector(test1), for: UIControl.Event.touchUpInside)
    
@objc func test1()  {
        //#selector
    }

六、网络请求 暂时使用Moya

七、let和var

let用于声明常量,即后续无法对其使用=运算符的一段空间,但是使用let声明的值,其属性可以正常使用=进行操作。
var用于声明变量,即后续可以对其使用=运算符的一段空间

八、关于可选项绑定

Initializer for conditional binding must have Optional type, not 'xxx'

可选项绑定是当某函数返回值为可选值时采取的措施
ex.

  if let index = cString.index(cString.startIndex, offsetBy: 2,limitedBy: cString.endIndex) {
                
}

string的这个index函数返回值为String.Index?,不确定返回值有着确定的值,所以采取可选绑定,在花括号中对返回值?进行相关的处理即可

你可能感兴趣的:(【Swift】Swift 中遇到的问题 (昨天刚开始正经使用Swift写项目,问题确实多,也希望看到文章的各位大佬多多指导))