string?变量进行强解包发生崩溃的解决办法

swift学习第一天:正式学习swift,可能有很多问题不怎么明白,如有问题,请指出!O(∩_∩)O谢谢


  1.swift中定义一个变量,系统不会自动赋值,变量不会分配到内存,所以事先初始化!

  2. 注释语句:

    //MARK: + 说明

    //类似oc中的#pragma mark

    

    //TODO: + 说明:

    //如果代码中有该标识,说明在标识处有功能代码待编写,待实现的功能在说明中会简略说明。

    

    //FIXME: + 说明:

    //如果代码中有该标识,说明标识处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明。

  3.关于“!”强解析,变量为nil崩溃的问题

  override func viewDidLoad() {
        view.backgroundColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
        
        
        
        /**
         *  创建空字符串
         *  建议使用“?”判断解析,当此变量没有值得时候,打印的话不会crash
         *  若使用“!”强制解析,当变量没有值的时候,打印的话,会crash
         */
        let c:String? = "my have"
        let d:String? = "a dag"
        print(c! + d!);
        
        
        //但实际开发中当变量为nil的时候,强行解包都会发生崩溃!
        
//        text1(A: "my", B: nil)
        
        //iflet
        text2(A: "my", B: nil)
        
        // guard let
        text3(A: "my", B: nil)
        
    }
    
    //text1按照常规方法解决,“!”强行解包;然而当A 或者B为空的时候就会崩溃;因为用一个“!”时,程序猿都要对他进行管理,所以开发过程尽量避免少用“!”进行解包!
    func text1(A:String?,B:String?){
        print(A! + B!)
    }
    
    //MARK:- 方法2
    //用到了if let 语句,将A进行了一次赋值给A,B给B;这样就避免了解包为nil带来得崩溃
    func text2(A:String?,B:String?){
        if let A = A,let B = B {
            //使用的A 或 B时候会发现有2个A,2个B;string类型的只作用于 此{}内
            print(A + B)
        }else{
            
            print("A 或 B 为空")
        }
    }
    
    //MARK:- 方法3
    //用guard let 也可以巧妙避开解包带来得困扰,guard let 的用法和iflet相反; 如果 A 或 B 为空 执行 reture{},不会进行接下来得代码,
    //guard let 相对 if let 在实际开发更实用,可以有效的减少代码层次,增加可读性!比如登陆界面 有效判断账号或密码是否为空,为空就终止
    func text3(A:String?,B:String?){
        guard let A = A ,let B = B else { return print("A 或 B 为空") }
        
        
        print(A + B)
    }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值