Swift3.0 Optional String 类型 强制拆包

前端之家收集整理的这篇文章主要介绍了Swift3.0 Optional String 类型 强制拆包前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

/**

Swift3.0 String OptionalString作为urlString去初始化url并进行网络访问时,会出现urlOptionalstring错误情况

如:在AFNetwork3.0get请求中使用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类型但是Swift3.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!)")


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

猜你在找的Swift相关文章