swift入门

闲在家里没事,学一下swift。参考的是苹果官网A Swift Tour

https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html

和language guide

后来发现language guide 有中文版的

https://swiftgg.gitbook.io/swift/

 

 

像python一样,语句末可以不写;

变量名可以用中文等任何种类符号

Simple Values

用let声明常量,var声明变量,常量和变量都可以先声明再赋值,常量只能赋值一次

声明的时候可以不指定类型也可以指定类型,类型转化必须显式转化

通过\(a)的形式在字符串中插入数字,()内支持简单运算,如\(a+b),实际上a、b可以是任何类型的变量

支持数组[]和字典[:]

Control Flow

if语句,while语句,repeat语句 ,switch语句

支持nil,需要加let

  1. if let name = optionalName { //let name=optionalName 在optionalName不为nil的时候,取值为真
  2. greeting = "Hello, \(name)"
  3. }

case let x where x.hasSuffix("pepper"): //这写法也合适日常英语语法习惯,个人感觉。

感觉swift的语法好丑,0..<4  什么鬼,看到这里都不想看下去了。

函数,对象一般使用和其他语言没大的差别。

20200207

好吧,今天继续看,

这次看的是langugae guide,

基础:

支持各种数据类型,支持数组、集合、字典,比oc多了一个元组,

支持变量和常量,类型安全,支持可选值

示例代码用驼峰式变量命名,变量名支持中文,不能有空格

let 声明常量,var 声明变量

注释用//,/**/

显式类型转化,就算不同的整型也必须显式转化

元组可以用名称或下标访问,_代表忽略这个值

不是可选值类型不能赋值nil

可选值绑定 ,在一个判断语句用支持多个可选值绑定,用逗号隔开

如果确定一个可选值是有值的,可以在变量名后加!,强制展开 //这部分以前没遇到过,不是很明白

错误处理,要放到do声明中,try 加在方法前

断言在debug模式有效,预言precondition在debug和release模式下都有效

//precondition(_:_:file:line:)  这个参数不懂什么意思

基础操作符(运算符)

元组是可比较的

赋值语句不返回值

-a可表示负a,+a其实不进行任何操作

三元运算符?:

空指针合并运算符??

区间运算符 1...4,1..<4,  还可以半开区间...4,2...  range是一种数据类型,不是一个数组。

字符串和字符

“”“ 可以开始一段字符,而不是一句字符

\u{24} 代表符号$

字符串前加#,可以避免转义,字符串内的“ ,\n会当成普通符号。

明天继续

20200208

多行字符串,行的末尾加\,可以不换行。

字符串是值类型,字符串不能用int类型的下标直接读取字符,如string[1],会提示错误,字符串的索引是一个类似range类型的专门的index类型

字符串内插用\()

insert(_:at:),方法前的_表示参数的名称可以忽略

string的remove,insert,append,removeRange,hasprefix,hassuffix

从string中截取的一段字符串是substring,substring如果在后面还要用到,建议存到一个新变量中,因为substring只是指向了原来的string。

//unicode编码这块以后再熟悉一下,貌似一下子用不到深入了解

Array(repeating: 0.0, count: 3) 创建一个带初始值的数组,数组可以相加+

collections类型

包含数组、集合、字典

集合可以计算交集intersection(_:) ,symmetricDifference(_:) ,union(_:),subtracting(_:)

集合还有是否子集isSubset(of:) ,isSuperset(of:),isStrictSubset(of:),isStrictSuperset(of:) ,isDisjoint(with:)

字典有updateValue(_:forKey:),removeValue(forKey:)  ,keys,values

swift中的函数多个参数间少了,因为用:隔开就可以了,一开始看着不习惯

循环控制

for循环还可以不带变量

  1. for _ in 1...power {
  2. answer *= base
  3. }

for in 基本取代以前的for循环

注意stride(from:to:by:)和stride(from:through:by:)的区别

switch有很多新东西,结构更清晰,支持range,支持元组,元组中还支持(_)

值绑定,A switch case can name the value or values it matches to temporary constants or variables ,可以获取匹配到的值在当前case中用

switch还支持where运算,以前觉得switch没啥用,现在觉得switch要火

循环控制中还支持label statement,直接退出多层循环

guard语句也挺好的,提高可读性

检查api可用性#available

函数

  1. func greeting(for person: String) -> String {
  2. "Hello, " + person + "!"
  3. }

这里的for 关键字不知道啥作用? for是参数标签,person是参数名,参数标签在调用的时候增加可读性

默认情况下参数标签和参数名一致,带参数标签的函数,在调用时需写清楚参数标签,

(_) 可以用来设置不需要参数标签。

相同类型的多个参数,可以用可变参数来实现

  1. func arithmeticMean(_ numbers: Double...) -> Double {

像这样,可以接受多个double类型的函数

参数都是常量类型

inout参数,类似c中的传引用,用&获取地址

函数的类型包括输入类型和输出类型共同组成

var mathFunction: (Int, Int) -> Int = addTwoInts ,这个用法有点牛

所以函数也可以作为参数了

 closures,闭包?

reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )

这里的in 不知道如何理解?

闭包太长,可以用尾随闭包

//闭包回头再看看

 

枚举

枚举支持联合,支持原始值,原始值默认就是枚举项的名称,也可以是int类型的数值

枚举还可以递归,跳过去了

结构和类,

结构和枚举是值类型,类是引用类型,用===比较两个对象是不是指向同一个实例

 

 

 

 

 

 

 

 

建议用struct,除非用到oc采用class

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值