Swift(一 标识符 运算符 数据类型 字符串)

注:近期学习swift,看的是人民邮电出版的《从零开始学习Swift3》(小差错不少),目前只看到了前几章。每章的知识点 琐碎,同时存在与其他语言易混淆的部分,不常用的难理解的部分记录下来。

第一章

1、函数签名:

是由函数(或者方法)的名称和参数标签组成,不包括返回值与参数类型。

在Swift3之后,调用函数 时要求指定所有参数的标签,除非函数定义时,使用下划线(_)关键字声明标签。
  //1、 函数标签:rectangleArea(W:H:)  调用时候,如果没有W H,参数标签就是width与height
func rectangleArea(W width:Double, H height: Double) -> Double{
let area = width * height
return area
}
// 调用
rectangleArea(W: 1, H: 2)

//2、 函数标签:rectangleArea(_:H:)
func rectangleArea(_ width:Double, H height: Double) -> Double{
let area = width * height
return area
}
// 调用
rectangleArea(1, H: 2)
上函数中,WH_是参数标签,width height是参数名。参数名是在函数或者方法内部使用的名字,参数标签是在函数或者方法调用时使用的参数名。   
2、Swift的开发工具:

xcode开发工具;AppCode最优秀的第三方开发工具。
AppCode是付费软件。Xcode是主流。
在xcode代码编辑区域,如果想查询比较完整全面的帮助文档,可以按住Alt键双击某个方法,打开XcodeAPI帮助搜索结果窗口。

第二章

1、编写与运行swift方式

1.1 交互式方式运行(REPL 或者 Playground)
1.2 编译为可执行文件方式运行(iOS 或者 macOS工程)

REPL:Read-Eval-Print Loop--读取求值输出循环
启动Swift: 直接在终端输入swift回车即可(xcode6 输入xcrun swift)
退出::exit或 :quit
通过Xcode创建macOS工程 就是创建Command Line Tool命令行

第三章

1、标识符

区分大小写,可以是字母、数字、下划线、中文、表情,首字母不是是数字。
关键字作为标识符,必须加上重音符号,重音符号不是标识符的一部分。

 let `class` = "123" // ``也可以用于其他标识符,`a`与a是等价的
 let `a100` = "1"
  print(a100)  // 打印 1
2、关键字

关键字是区分大小写的。下划线(_)关键字表示模式匹配,可以替换任何字符。

3、常量let 变量var

常量只能初始化一次,可以带上类型先定义,再赋值也是可行的。变量声明时候如果不写类型必须初始化。要么不初始化,但是必须加上类型。

var var01 = 100;
var var02 : String
var var03  // var var03  编译失败

let和var关键字声明时候,原则上优先使用let。可以防止程序运行过程中不必要的修改并提高程序的可读性。不能修改let变量的值,但是可以通过指针获得对象后,修改对象内部的属性。

特别注意,引用数据类型声明时,经常采用let声明,虽然从业务层面来讲并不需要一个常量,但是使用let可以防止引用数据类型在程序运行过程中被错误地修改。
4、注释 表达式

// 单行注释; /**/ 块注释;Swift的多行注释可以嵌套。表达式在声明变量和常量时候不要指定数据类型。因为这样程序代码非常简洁,但有时需要指定特殊的数据类型,例如var a:Int16 = 10代码。对应语句结束后的分号不是必须情况下也不要加。多语句写在一行上要加分号。

第四章

1、一元运算符 二元运算符

swift不存在a++ ++a --a a--等运算符,应该使用a += 1 a-=1替换。二元运算符中浮点数取余运算的时候%不能使用。整数可以。用浮点数的truncatingRemainder(dividingBy: )函数进行取余运算。

2、算术赋值运算符

+= 加赋值, -= 减赋值, *=乘赋值, /= 除赋值, %=取余赋值。

3、关系运算符

=== 恒等于 主要用于引用类型数据比较 eg:a === b a与b引用同一个实例时候返回true 否则返回false,比较两个引用的内容是否为同一个实例。 !== 与===相反 不恒等于

4、位运算符

“~” 位反:按位取反
“&” 位与:两位全部为1,这一位才为1
“|” 位或:只要有一个为1 这一位就是1
“^” 位异或:两位相反时这一位才为1
“>>”右移:比如UInt8,右移之后,(超出8位)右边两位去除,高位补零。
“<<”左移:比如UInt8,左移之后,(超出8位)左边两位去除,低位补零。

第五章

1、Swift的数据类型

整型、浮点型、布尔型、字符、字符串(String)、元组、集合、枚举、结构体属于值类型

  • Int8相当于OC的char Int16相当于OC的short Int32相当于int Int64相当于OC的long Int相当于OC的NSInteger
    类属于引用类型
2、浮点型

浮点型主要用来存储小数数值,也可以用来存储范围较大的整数。默认的浮点数是Double类型

var vard:Double = 2553333
3、数字表示方式

3.1 进制表示
二进制数:0b 0b11100 (28)
八进制数:0o 0o34(28)
十六进制数:0x 0x1C (28)
3.2 指数表示
十进制指数: 3.36e2 (3.36 * 10的2次幂)
还有补零、添加下划线表示的形式 都是可以的。

4、整型之间的转换

Swift中,不同类型的变量/常量 不能相互运算,编译失败。必须显示转换(利用构造函数)

let historyScore:UInt8 = 90
let englishScore:UInt16 = 130
let totalScore = UInt16(historyScore) + englishScore
注:一般提倡小范围转大范围,不提倡大范围转小范围,可能会造成精度的丢失,甚至运行异常。

整型与浮点数类型转换和上文类似。

5、布尔型

在Swift中,布尔类型只有两个值 true false

6、元组类型

元组是一种数据结构,元组就像一条表的记录,各字段类型不必相同。元组在作为函数返回多值时尤其重要。在分解元组时候 不需要的字段可以用下划线"_"代替:

 // 写法
 let info = ("123", 18)
 let info1 = (name: "123" , age: 18)
 let  (name, age) = ("123", 18)

 var student = (id:"1002", name:"zhangsan",english_score:32,chinese_score:80)
 let (id1,name1,_,_) = student
 print(id1,name1, student.0, student.id) // .键值(键存在时)  .下标都可以访问
7、可选类型

Swift所有的数据类型声明的变量或者常量都不能为空值(nil)
如果一个变量/常量的值 可能为空 可能不为空,就用当前类型的可选类型 Int->Int? Int!
可选类型的存在主要是因为Swift是强类型,Int类型的 除了能存储整型数据,其他都不可以存储, 包括nil。
Int?是对Int的一层包装,它们是2种不同的数据类型。可以直接将Int类型赋值给Int?类型(小->大)
如果某个变量一直有值 就用普通类型
如果不确定是否有值就用可选类型:? !
"?": 开始不确定有没有值的存在,拆包时候需要用感叹号!拆包 (显示拆包)
"!": 一般是开始确定一定有值,拆包时候 省略感叹号! (隐式拆包)

   let n1:Int? = 10       // 可选类型
   print(n1!)             // 显式拆包 / 强制拆包
   var n2:Int! = 10       // 隐式拆包可选类型
   print(n2)              // 隐式拆包
   var n3:Int?
   print(n3!)             // 不正确,!强制拆包  some必须有值--fatal error: unexpectedly found nil while unwrapping an Optional value(可选类型打印是Optional(xxx))

可选绑定:选择性的赋值,如果可选类型值存在 就自动解包赋值给一个常量或者变量,如果可选类型值不存在,就不创建这个常量或者变量

     // 方法
    func n1Value(n: Int)->Int?
    {
          if n == 0 {
               return nil
         }else {
        return n
       }
    }
    // 可以自动解包,n0就是解包后的Int类型
  if let n0 = n1Value(n: 1)  {    // 多个值绑定语句用逗号分隔,只要有一个值绑定失败,整个结果就是false
         let nn : Int = n0     // 不报错  说明n0是普通类型
         print("n0创建 值为:\(n0)")
     }else{
         print("n0没有创建")
     }
第六章
1、字符 ---- 使用双引号 (单字符)
 var char01: Character = "a"  // 单字符
 var charStr:Character = "\u{26}" // Unicode编码
2、字符串(结构体) ---- 使用双引号 (单字符或者多字符)
  • 使用String的原因:String是个结构体,性能更高,NSString是一个OC对象,性能略差,String支持直接遍历, Swift提供了String和NSString之间的无缝转换
var str0: String = "Objective-C and Swift" // String可省略,默认是String类型
let emptystring1 = "" // 单字符

字符串的长度:

str0.characters.count  // str0.characters字符串的遍历  Character类型
3、转义符

“ \t ”: 水平制表符
" \n ": 换行
" \r ": 回车
" "" ": 双引号"
" ' ": 单引号'
" \" ": 反斜杠\

4、字符串的拼接(++=\append相同类型 \()不同类型)
  • 可变字符串: var定义
    不可变字符串:let定义

       append拼接:
       lamda2.append("a") // 必须是单个字符
       lamda2+="123" //  +=写在引号外部
       print(andSign2+"字符串bu相等"+lamda2) //  +写在引号外部
       print("5=\(2+3)") //  将Int类型转String类型拼接,表达式写在引号内部
    
  • *字符串的格式化

     // 字符串的格式化
     var min = 12
     var second = 23
     var time = String.init(format: "%02d: %02d", arguments: [min, second])
    
5、字符串的插入删除替换 截取

// 字符串的操作--String.Index是索引类型

var str0: String = "Objective-C and Swift"

5.1、插入字符 insert(_ newElement: Character, at i: String.Index)

str0.insert(".", at: str0.endIndex) // "Objective-C and Swift."

5.2、删除字符remove(at i: String.Index)-> Character

str0.remove(at: str0.index(before: str0.endIndex)) // "."

5.3、删除指定范围removeSubrange(_ bounds: ClosedRange)

var startIndex = str0.startIndex
var endIndex = str0.index(startIndex, offsetBy: 9)  // 从startIndex索引开始向后9个字符的索引值
var range = startIndex...endIndex
str0.removeSubrange(range)  // "C and Swift"

5.4、替换replaceSubrange(_ bounds: ClosedRange, with newElements: String)

startIndex = str0.startIndex
endIndex = str0.index(startIndex, offsetBy: 0)
range = startIndex...endIndex
str0.replaceSubrange(range, with: "C++") // "C++ and Swift"

5.5、*字符串的截取

   这种不再使用了,String.Index索引类型不方便
   //str.substring(to: <#T##String.Index#>)
   //str.substring(from: <#T##String.Index#>)
   //str.substring(with: <#T##Range#>)

   这样用,先String转NSString,再调用NSString的截取方法,传入Int即可。(str as NSString)是NSString类型
   (str as NSString).substring(to: <#T##Int#>)
6、字符串的比较

大小: >、 < 是否相等: ==、 !=

(Swift的Foundation中NSString使用=== 、 !==是否相等)

""和String()创建的空字符串是相等的。

 let emptystring1 = ""
let emptystring2 = String()

if emptystring1 == emptystring2 {
    print("相等")
}else
{
   print("不等")
}

字符串的hasSuffix(_ :) hasPrefix:(_ :)

lamda2.hasPrefix("1")  // false
lamda2.hasSuffix("3")  // true

你可能感兴趣的:(Swift(一 标识符 运算符 数据类型 字符串))