Swift3.0 Optional String 类型 强制拆包

原创 2017年03月15日 16:44:01

        /**

         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!)")


//
//  ViewController.swift
//  test_swift3.0_Optional_01
//
//  Created by jeffasd on 17/3/15.
//  Copyright © 2017年 jeffasd. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        
        /**
         Swift3.0中 String的 Optional在String作为urlString去初始化url并进行网络访问时,会出现url为Optional包string的错误情况
         如:在AFNetwork3.0的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类型但是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被隐式封包时 如果要作为初始化URL的String时,必须要进行强制拆包,强制拆包为 在Optional类型的String参数后加上 '!' 号
        //上面的 urlStr 已经被隐式封包 此处进行强制拆包
        //urlStrOptional! 和 urlStr! 可作为初始化URL的String 因为urlStrOptional! 和 urlStr!进行了强制拆包
        print("the urlStrOptional is \(urlStrOptional!)")
        print("the urlStr is \(urlStr!)")
        
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}


相关文章推荐

Swift 关于字符串 Optional("123")输出的问题。

RT

Swift学习之七:Optional value(可选值)

当值可能不存在(may be absent)的时候使用Optionals,

Swift 可选值(Optional Values)介绍

Optional也是Objective-C没有的数据类型,是苹果引入到Swift语言中的全新类型,它的特点就和它的名字一样:可以有值,也可以没有值,当它没有值时,就是nil。此外,Swift的nil也...

Swift Optional 可选型的解包简单使用

//swift是严格的强类型语言 var errorMessage: String? = "adfa" if let message = errorMessage {//尝试解包, 把他付给一个变量 ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Swift 类型转换is, as, Any, AnyObject(十二)

/// 父类 Person class Person { var name: String init(name: String){ sel...

Swift中可选类型隐式解包判断空会报错

前面一直没注意,如果需要使用隐式解包,要确保 使用前会赋值var a:Int!//这里会报错的,使用!声明的可选类型为隐式解包,当a == nil时会自动解包 if a == nil { //...
  • sbt0198
  • sbt0198
  • 2016年12月07日 14:41
  • 284

swift3新路程(16)nil、optional values和强拆包(!)

nil不可以用在不是可选值的常量和变量中 如果说一个常量或者变量会是可能没有的值得情况的话 我们应该将他作为可选值进行声明 如果我们声明了一个可选值,但是我们没有对它进行初始化的话,他的默认值就是ni...

随手记Swift基础和Optional Type(问号?和感叹号!)

距离Apple推出Swift已经有几天了,网上也时不时出现“急招Swift程序员,要求有一天工作经验”的帖子。看到Swift,除了苹果放的另外一门语言的链接(http://swift-lang.org...

swift 可选类型,强制拆包,隐性拆包

当我们不知道变量的值时,可以将改变量设置为可选类型 //表明str是可选类型(string类型或者nil类型) var str:String? //表明str是可选类型(是stri...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift3.0 Optional String 类型 强制拆包
举报原因:
原因补充:

(最多只允许输入30个字)