Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Swift 学习之二十一:?和 !(详解)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值, 也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化 。如果在使用变量之前不进行初始化就会报错: [plain]  view plain  copy  print ? var stringValue : String    //error: variable 'stringValue' used b

Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,

也就是说变量不会有认值,所以要求使用变量之前必须要对其初始化

。如果在使用变量之前不进行初始化就会报错:

@H_301_18@ [plain] view plain @H_404_21@copy
@H_404_21@print ? @H_404_21@ @H_404_21@
  1. varstringValue:String
  2. //error:variable'stringValue'usedbeforebeinginitialized
  3. //lethashValue=stringValue.hashValue
  4. //^
  5. lethashValue=stringValue.hashValue

出错的原因就是在使用stringValue这个变量之前,没有初始化这个变量,也就是这个变量根本就没有得到内存,

这时就会出错。

那么我们可以使用optional类型,后面跟一个?就是了。


文档中有提到说,在使用Optional值的时候需要在具体的操作,比如调用方法、属性、下标索引等前面需要加上一个 ,如果是nil值(不存在值),也就是 Optional.None ,会跳过后面的操作不执行,如果有值,就是 Optional.Some 可能就会拆包(unwrap),然后对拆包后的值执行后面的操作,来保证执行这个操作的安全性,比如Optional binding:


在写协议(protocol)时,对于可选代理方法,也需要在调用时在函数名后跟着?,如:

copy

@H_404_21@ //@objc是用于处理Swift与OC之间的转换的,由于@optional是OC中的关键字,
  • //所以在protocol之前需要添加上@objc。
  • @objcprotocolHttpRequestDelegate{
  • //@optional说明这个代理方法是可选方法,
  • //那么在调用的时候,需要这样调用:delegate?.requestFinished?(self,downloadData)
  • //其中delegate?是因为delegate也是optional的
  • @optionalfuncrequestFinished(request:HttpRequest!,downloadData:NSMutableData!)
  • //otherfuncs...
  • }
  • vardelegate:HttpRequestDelegate?
  • vardownloadData=NSMutableData()
  • delegate.requestFinished(self,downloadData)
  • 大佬总结

    以上是大佬教程为你收集整理的Swift 学习之二十一:?和 !(详解)全部内容,希望文章能够帮你解决Swift 学习之二十一:?和 !(详解)所遇到的程序开发问题。

    如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
    如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
    标签: