美文网首页
swift基础

swift基础

作者: 阿龍飛 | 来源:发表于2019-03-12 15:42 被阅读0次

    Swift开发入门-基础知识:https://www.jianshu.com/p/3b01707fed18

    Swift 之 Alamofire 网络请求、https://blog.csdn.net/lvchenqiang_/article/details/77418272

    最近Swift项目实践的小分享: https://www.tuicool.com/articles/I7naYjm

    常见和变量

    let 用于定义常量,定义完后不能修改。
    var 用于定义变量,可以修改。
    
            let a = 10
            print(a)
            
            var b = 20
            b = 30
            print(b)
            
            let c: Int = 10
            print(c)
            let d: CGFloat = 20.3
            print(d)
            
            let res = c + Int(d)
            print(res)
    

    UIButton

     override func viewDidLoad() {
            super.viewDidLoad()
            self.view.backgroundColor  = UIColor.white
            // Do any additional setup after loading the view.
            
            let myView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
            myView .backgroundColor = UIColor.red
            view .addSubview(myView)
            
            let btn = UIButton(type: .custom)
            btn .setTitleColor(UIColor.black, for: .normal)
            btn .setTitle("FirstBtn", for: .normal)
            btn.backgroundColor = UIColor.yellow
            btn.frame = CGRect(x: 0, y: 0, width: 100, height: 50)
            btn.addTarget(self, action: #selector(buttonClick(btn:)), for: .touchUpInside)
            btn.titleLabel?.font = UIFont.systemFont(ofSize: 15)
            btn.layer.masksToBounds = true
            btn.layer.cornerRadius = 10.0
            btn.layer.borderColor  = UIColor.purple.cgColor
            btn.layer.borderWidth = 1
            myView .addSubview(btn)
    
        }
        
        @objc func buttonClick(btn:UIButton){
            btn.isSelected  = !btn.isSelected
            if btn .isSelected {
                btn.setTitle("Selected", for: .normal)
            }else{
                btn.setTitle("NoSelected", for: .normal)
            }
        }
    

    什么是可选类型

    可选类型伴随着Swift诞生,在原有的Objective-C语言中不存在,究其原因,是因为Swift是类型安全的语言,而OC则是弱类型语言,OC中 str字符串既可以是nil,也可以是字符串,而Swift中,这两种状态是不能同时存在的。
    OC和Swift对于nil的解释也是不太一样的

    var optionalStr: String? = "swift语言可选类型"//声明可选类型字符串,并赋初值
    var opStu:Student? //声明可选opStu对象,赋初值nil
    

    强制解析

    当你确定自定义的可选类型一定有值时,可以使用操作符(!)进行强制解析,拿到数据,叹号表示"我知道一定有值,请使用它",但是当你判断错误,可选值为nil时使用(!)进行强制解析,会有运行错误。

    var myStr:String? = nil
    myStr="强制解析,一定有值"
    if myStr != nil {
        print(myStr!)//使用!进行强制解析
    }else{
        print("字符串为nil")
    }
    
    输出:强制解析,一定有值
    

    自动解析

    在最初的声明时使用?修饰,当你希望它自动解析是可以用!代替?来修饰,这样在变量使用时就不需要加!来强制拆包,它会自动解析。

    var myStr:String! //使用!修饰
    myStr="自动解析"
    if myStr != nil {
        print(myStr)
    }else{
        print("字符串为nil")
    }
    
    输出:自动解析
    

    可选绑定

    var myStr:String?
    myStr="可选绑定"
    if  let tempStr = myStr {
        print(tempStr)//如果myStr有值的话,就会赋值给tempStr,然后使用
    }else{
        print("字符串为nil")
    }
    输出:可选绑定
    

    as! 与 as? 的类型转换

    向下转型(Downcasting)时使用。由于是强制类型转换,如果转换失败会报 runtime 运行错误。就是说强制从父类转换成子类

    class Animal {}
    class Cat: Animal {}
    let animal :Animal  = Cat()
    let cat = animal as! Cat
    

    as? 和 as! 操作符的转换规则完全一样。但 as? 如果转换不成功的时候便会返回一个 nil 对象。成功的话返回可选类型值(optional),需要我们拆包使用。由于 as? 在转换失败的时候也不会出现错误,所以对于如果能确保100%会成功的转换则可使用 as!,否则使用 as?

    let animal:Animal = Cat()
    
    if let cat = animal as? Cat{
        print("cat is not nil")
    } else {
        print("cat is nil")
    }
    

    向下转换
    某个类类型的常量或变量实际上可能是其子类的实例。这种情况下,我们会用到类型转换操作符( as? 或 as! )向下转换为子类类型。

    as? :类型转换的条件形式,向下转换为某个类型时,返回该类型的可选值,即:转换失败时返回 nil 。使用场景:向下转换可能会失败的情况。

    as! :类型转换的强制形式,向下转换为某个类型时,会进行强制解包,即:转换失败时触发运行时错误。使用场景:向下转换确定不会失败

    相关文章

      网友评论

          本文标题:swift基础

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