Swift4.0【Optional String 类型 强制拆包】

来源:互联网 发布:贵州广电网络节目表 编辑:程序博客网 时间:2024/06/07 02:03


         Swift4.0 String OptionalString作为urlString去初始化url并进行网络访问时,会出现urlOptionalstring的错误情况
         如:在AFNetwork3.1get请求中使用Optional 类型的 String时,会有如下错误:
         //NSErrorFailingURLStringKey=Optional(http://api.test.com/api/getcommon.php)?bundleId=com.dddd
         所以要避免urlStringOptional类型 
          String类型转为Optional String类型为 封包
         Optional String 类型强制转换为String类型 成为强制拆包
         */
        
        //封包 显式封包
        let urlStrOptional: String? = "http://api.test.com/api/getcommon.php";
        print("the urlStrOptional is \(urlStrOptional)")
        //输出为:the urlStr is Optional("http://api.test.com/api/getcommon.php") 不能作为urlString 去发送url请求
        


        //封包 隐式封包
        //此处需要注意虽然在定义urlStr时定义为非Optional类型但是Swift4.0在使用 '='  赋值时,左边的变量会被自动转换为Optional类型(称为隐式封包)
        //这点是Swift3.0的一个特点 需要特别注意!!!
        let urlStr: String! = "http://api.test.com/api/getcommon.php";
        print("the urlStr is \(urlStr)")
        //输出为:the urlStr is Optional("http://api.test.com/api/getcommon.php") 不能作为urlString 去发送url请求
        
        //强制拆包
        //String被隐式封包时 如果要作为初始化URLString时,必须要进行强制拆包,强制拆包为Optional类型的String参数后加上 '!' 
        //上面的 urlStr 已经被隐式封包 此处进行强制拆包
        //urlStrOptional!  urlStr! 可作为初始化URLString 因为urlStrOptional!  urlStr!进行了强制拆包
        print("the urlStrOptional is \(urlStrOptional!)")
        print("the urlStr is \(urlStr!)")


[objc] view plain copy
  1. //  
  2. //  ViewController.swift  
  3. //  test_swift4.0_Optional_01  

  4.   
  5. import UIKit  
  6.   
  7. class ViewController: UIViewController {  
  8.   
  9.     override func viewDidLoad() {  
  10.         super.viewDidLoad()  
  11.         // Do any additional setup after loading the view, typically from a nib.  
  12.     }  
  13.       
  14.     override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {  
  15.           
  16.         /** 
  17.          Swift3.0中 String的 Optional在String作为urlString去初始化url并进行网络访问时,会出现url为Optional包string的错误情况 
  18.          如:在AFNetwork3.1的get请求中使用Optional 类型的 String时,会有如下错误: 
  19.          //NSErrorFailingURLStringKey=Optional(http://api.test.com/api/getcommon.php)?bundleId=com.dddd 
  20.          所以要避免urlString为Optional类型  
  21.          将 String类型转为Optional String类型为 封包 
  22.          将Optional String 类型强制转换为String类型 成为强制拆包 
  23.          */  
  24.           
  25.         //封包 显式封包  
  26.         let urlStrOptional: String? = "http://api.test.com/api/getcommon.php";  
  27.         print("the urlStrOptional is \(urlStrOptional)")  
  28.         //输出为:the urlStr is Optional("http://api.test.com/api/getcommon.php") 不能作为urlString 去发送url请求  
  29.           
  30.   
  31.         //封包 隐式封包  
  32.         //此处需要注意虽然在定义urlStr时定义为非Optional类型但是Swift3.0在使用 '=' 号 赋值时,左边的变量会被自动转换为Optional类型(称为隐式封包)  
  33.         //这点是Swift4.0的一个特点 需要特别注意!!!  
  34.         let urlStr: String! = "http://api.test.com/api/getcommon.php";  
  35.         print("the urlStr is \(urlStr)")  
  36.         //输出为:the urlStr is Optional("http://api.test.com/api/getcommon.php") 不能作为urlString 去发送url请求  
  37.           
  38.         //强制拆包  
  39.         //当String被隐式封包时 如果要作为初始化URL的String时,必须要进行强制拆包,强制拆包为 在Optional类型的String参数后加上 '!' 号  
  40.         //上面的 urlStr 已经被隐式封包 此处进行强制拆包  
  41.         //urlStrOptional! 和 urlStr! 可作为初始化URL的String 因为urlStrOptional! 和 urlStr!进行了强制拆包  
  42.         print("the urlStrOptional is \(urlStrOptional!)")  
  43.         print("the urlStr is \(urlStr!)")  
  44.           
  45.           
  46.     }  
  47.   
  48.     override func didReceiveMemoryWarning() {  
  49.         super.didReceiveMemoryWarning()  
  50.         // Dispose of any resources that can be recreated.  
  51.     }  
  52.   
  53.   
  54. }