博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift 学习笔记
阅读量:5880 次
发布时间:2019-06-19

本文共 3783 字,大约阅读时间需要 12 分钟。

hot3.png

注意:1.赋值器(setter)中,接收的值被自动命名为newValue。var perimeter: Double {     get {         return 3.0 * sideLength     }     set {         sideLength = newValue / 3.0     } } 2如果不需要计算属性的值,但需要在赋值前后进行一些操作的话,使用willSet和didSet:

    var triangle: EquilateralTriangle {     willSet {         square.sideLength = newValue.sideLength     }     }     var square: Square {     willSet {         triangle.sideLength = newValue.sideLength     }     }     3?的另一种用途使用可空值时,?可以出现在方法、属性或下标前面。如果?前的值为nil,那么?后面的表达式会被忽略,而原表达式直接返回nil,例如:123456    1 2 3 let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional  square") let sideLength = optionalSquare?.sideLength4使用断言调试断言是一种实时检测条件是否为true的方法,也就是说,断言假定条件为true。断言保证了后续代码的执行依赖于条件的成立。如果条件满足,那么代码继续执行,如果这个条件为false,那么代码将会中断执行。在Xcode中,在调试的时候如果中断,可以通过查看调试语句来查看断言失败时的程序状态。断言也能提供适合的debug信息。 使用全局函数assert来使用断言调试,assert函数接受一个布尔表达式和一个断言失败时显示的消息,如:let age = -3assert(age >= 0, "A person's age cannot be less than zero")// this causes the assertion to trigger, because age is not >= 0当前一个条件返回false的时候,后面的错误日志将会输出。在这个例子中,只有当age >= 0的时候,条件被判定为true,但是age = -3,所以条件判定为false,输出错误日志 “A person’s age cannot be less than zero”。当然错误日志也可以省略,但是这样不利于调试,如assert(age >= 0)当需要检测一个条件可能是false,但是代码运行必须返回true的时候使用。下面给出了一些常用场景,可能会用到断言检测:传递一个整数类型下标的时候,比如作为数组的Index,这个值可能太小或者太大,从而造成数组越界;传递给函数的参数,但是一个无效的参数将不能在该函数中执行一个可选类型现在是nil,但是在接下来的代码中,需要是非nil的值才能够继续运行。详见 Subscripts和Functions注:断言会导致程序运行的中止,所以如果异常是预期可能发生的,那么断言是不合适的。这种情况下,异常是更合适的。断言保证错误在开发过程中会被发现,发布的应用里最好不要使用。5.前缀(prefix)相等和后缀(hasSuffix)相等使用string 类的两个方法hasPrefix和hasSuffix,来检查一个字符串的前缀或者后缀是否包含另外一个字符串,它需要一个String类型型的参数以及返回一个布尔类型的值。两个方法都会在原始字符串和前缀字符串或者后缀字符串之间做字符与字符之间的。6.大小写字符串你可以从一个String类型的uppercaseString 和 lowercaseString中获得一个字符串的大写或小写。  let normal = "Could you help me, please?"  let shouty = normal.uppercaseString// shouty is equal to "COULD YOU HELP ME, PLEASE?"  let whispered = normal.lowercaseString// whispered is equal to "could you help me, please?"    7.创建一个空的数组和确定的类型(不包含初始化值)使用的初始化语法:123    var someInts = Int[]()println("someInts is of type Int[] with \(someInts.count) items.")// prints "someInts is of type Int[] with 0 items.”    注意,someInt变量被确定为Int[],因为它使用生成Int[]的初始化方法。或者,如果上下文(context)已经提供类型信息,例如函数参数或者已经确定类型的常量和变量,你可以从空的数组实量(Array Literals)创建一个空数组,写作[](空的中括号对)。someInts.append(3)// someInts 现在包含1个Int型的元素someInts = []// someInts 现在是一个空的数组, 但是类型仍然为Int[];    8创建一个空字典和字典一样,你可以使用确定类型的语法创建一个空的字典。  var namesOfIntegers = Dictionary
()// namesOfIntegers 是一个空的 Dictionary
 类型的字典    这个例子创建一个Int,String类型的字典来储存可读性较好的整数值。它的键是Int类型,以及它们的值是String类型。如果 上下文(context )中已经提供类型信息,可用一个字典实量(Dictionary Literal)创建一个空的字典,写作[;](由一对[]包含一个冒号:)    namesOfIntegers[16] = "sixteen"// namesOfIntegers现在包含1 个键值对namesOfIntegers = [:]// namesOfIntegers 是一个类型为Int, String的空字典。            9 case中还可以直接测试元组是否符合相应的条件,_可以匹配任意值。下面的例子是判断(x,y)是否在矩形中,元组类型是(Int,Int)    let somePoint = (1, 1)    switch somePoint     {case (0, 0):println("(0, 0) is at the origin")    case (_, 0):println("(\(somePoint.0), 0) is on the x-axis")    case (0, _):println("(0, \(somePoint.1)) is on the y-axis")    case (-2...2, -2...2):println("(\(somePoint.0), \(somePoint.1)) is inside the box")    default:println("(\(somePoint.0), \(somePoint.1)) is outside of the box")}// prints "(1, 1) is inside the box"            fallthrough由于Swift中的switch语句不会自动的因为没有break而跳转到下一个case,因此如果需要想C语言中那样,依次执行每个case的时候,就需要用到fallthrough关键词。像下面这个例子一样,default分支最终都会被执行:    let integerToDescribe = 5var description = "The number \(integerToDescribe) is"switch integerToDescribe     {case 2, 3, 5, 7, 11, 13, 17, 19:    description += " a prime number, and also"    fallthrough    default:    description += " an integer."}    println(description)    // prints "The number 5 is a prime number, and also an integer."

转载于:https://my.oschina.net/gongxiao/blog/609064

你可能感兴趣的文章
IT168调查:云计算在中国还很“虚”
查看>>
英特尔Skylake处理器全面入驻Google Compute Engine
查看>>
NEC携手英特尔开发Cloud RAN解决方案 ,推进5G“最好时代”的到来
查看>>
D-Link家用路由器被曝大量严重漏洞
查看>>
NEC与日挥就利用AI、IoT技术改善工厂运营展开合作
查看>>
盘点:2016财年全球大型存储营收排名前九位的企业
查看>>
盛邦安全网站监控预警平台化繁为简 ——网站安全从管理向治理的迁移
查看>>
AMD至真至幻VR科技 精彩亮相6·18海交会
查看>>
2.5和5GbE交换机的出现:是好是坏?
查看>>
《Web安全之机器学习入门》一 1.6 本章小结
查看>>
Akamai发布2016Q2互联网发展状况安全报告 称中国是全球第二web攻击源
查看>>
E店宝发布ERP3.2版 推全行业解决方案
查看>>
港大斯坦福游学:零距离体验创新文化
查看>>
应用交付之外的F5 安全市场迎来一个有实力的竞争者
查看>>
《云安全原理与实践》——导读
查看>>
互联网时代的大数据思考
查看>>
测试开启MySQL performance_schema后对性能的影响
查看>>
RSA 2017观感之五:威胁情报追求精细化、人工智能走入产品化
查看>>
四步降低大数据应用门槛
查看>>
LTE-V有望未来为通信、汽车行业打开市场新空间
查看>>