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



         Swift4.0  String  Optional String 作为 urlString 去初始化 url 并进行网络访问时,会出现 url Optional string 的错误情况
          如:在 AFNetwork3.1 get 请求中使用 Optional  类型的  String 时,会有如下错误:
         //NSErrorFailingURLStringKey=Optional( http://api.test.com/api/getcommon.php)?bundleId=com.dddd
          所以要避免 urlString Optional 类型  
           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 被隐式封包时   如果要作为初始化 URL String 时,必须要进行强制拆包,强制拆包为 Optional 类型的 String 参数后加上  '!' 
         // 上面的  urlStr  已经被隐式封包   此处进行强制拆包
         //urlStrOptional!   urlStr!  可作为初始化 URL String  因为 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, 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. }  

你可能感兴趣的:(Swift)