基本运算符:
问:Swift语言为了减少常规编码错误,在基本运算符方面做了哪些改进?
答:赋值运算符“=”不返回值,防止if条件判断相等运算符“==”误写为赋值运算符“=”;
算数运算符(+-*/)不允许溢出,避免变量大于或小于该类型的取值范围;
基础部分提到过的,运算符两边需类型一致,确保编码意图清晰;
Swift中可以对浮点数进行求余%,提供了表示数值区间的a...b和a..<b;
问:什么是短路计算?
答:短路计算特性,体现在在空合运算符a??b,a为非nil,则不会计算b;逻辑与a&&b,a为false,则不会计算b;逻辑或a||b,a为true,则不会计算b;
以上,就是左边的已确定结果,右边值不会影响结果,就不需要进行右边计算,这种特性就是短路计算。
字符串和字符
问:Swift字符串为什么不能用整数索引?
答:可扩展的字符群集可以组成一个或者多个 Unicode 标量。这意味着不同的字符以及相同字符的不同表示方式可能需要不同数量的
内存空间来存储。所以 Swift 中的字符在一个字符串中并不一定占用相同的内存空间数量。因此在没有获取字符串的可扩展的字符群的
范围时候,就不能计算出字符串的字符数量。如果您正在处理一个长字符串,需要注意count(_:)函数必须遍历全部的 Unicode 标量,
来确定字符串的字符数量。不同的字符可能会占用不同的内存空间数量,所以要知道字符的确定位置,就必须从字符串开头遍历每一
个 Unicode 标量到字符串结尾。因此,Swift 的字符串不能用整数(Int)做索引,索引是String.Index类型。
问: 如何根据索引得到String中的字符?
答:str.startIndex得到第一个字符的索引,str.endIndex得到最后位置的索引(值与字符串长度一致,并不是最后一个字符的索引)。
successor()得到后一个字符索引,predecessor()得到前一个字符索引,advance(start:n:)得到起始索引为start,距离n的索引。
尝试获取出界的字符串索引,会抛出一个错误。
下图照例子编写,报错“‘String’ does not have a member named 'characters'”,待解决。
问:能不能把字符串当做多个字符的数组?
答:相似的地方:通过for-in遍历数组中的字符和字符串中的字符。
不同的地方:数组的索引是Int类型,字符串的索引不能是Int类型(是String.Index类型),所以str[0]报错,改为str[str.startIndex];
调用append(),字符串要加强制转换Character("!"),数组不需要。待完善,结论是不建议这样理解,两者内容有类似的地方,但使用上的不同点更多。