swift学习笔记(⼀)基本数据类型、字符串、集合、运算符、函
数、block
即将⼊职新公司,换⼯作的间歇期有时间看⼀看知识点,新项⽬⾥swift和oc混编,所以趁着机会看了下swift语法,由于UIKit oc和swift⼀样,所以只进⾏swift语法的学习,翻了⼀遍《swift 4从零到精通iOS开发》,第⼀遍阅读⽤笔标出了语法不同点,然后边写代码实验边做笔记的形式记录。
⼀、基本数据类型
1.元组
//元组允许⼀些不相关的类型进⾏⾃由组合,成为新的集合类型,适⽤于简单数据结构,复杂数据结构依然推荐⽤类或结构体。
var
var  pen:(name:String, length:NSInteger) = ("我的钢笔", 15)
//访问属性
print("名字:"+pen.name+" 长度:\(pen.length)”)
2.可选值类型
swift中基本数据类型不能为nil,如果想可以为nil需要⽤?进⾏包装成可选值类型,⽤该值时需要⽤!进⾏拆包操作。
!是打包和拆包
举例:
//编译报错,'nil' cannot be assigned to type 'String'
var str:String = "hello"
var
nil
str =nil
/
/编译报错,Variable 'str1' used before being initialized,因为swift中String是普通类型,普通类型不能等于nil
var str1:String
var
nil {
if if str1==nil
}
/*
编译通过,str2是String?类型
swift⾥在普通类型后⾯加?可以把普通类型包装成Optional类型。Optional类型不会单独存在,总会附着于某个具体数据类型之上,具体数据类型可以是基本数据类型、结构体或者类等。
Optional类型只有两种值:
1.如果附着类型对应的量值有具体的值,则为具体值得包装。
*/
var str2:String?
var
nil {
if if str2==nil
print("str2为空")
}
输出str2为空学swift语言能干什么
//编译报错,Value of optional type 'String?' must be unwrapped to a value of type 'String'
//如果使⽤str2必须进⾏拆包
var
var str3 = "hello" + str2
print(str3)
可以出现在类型后⾯和实例后⾯,如果出现在类型后⾯,代表此类型对应的Optional类型,如果出现在实例后⾯则代表可选链的调⽤。*暂时没弄懂
!也可以出现在类型后⾯和实⼒后⾯,出现在类型后⾯代表⼀种隐式解析的语法结构。*暂时没弄懂
//运⾏报错,Fatal error: Unexpectedly found nil while unwrapping an Optional value: file
//不能对nil拆包,所以拆包之前需要判断是否为空
var str2:String?
var
var str3 = "hello" + str2!
var
print(str3)
//不会⾛进判断条件⾥⾯
var str2:String?
var
if if str2 != nil
nil {
var str3 = "hello" + str2!
var
print(str3)
}
//⽤if let结构判断要拆包的变量是否为nil
let tmp = str2 {
if if let
var
var str3 = "hello" + str2!
print(str3)
var
var str3 = " hello" + str2!
print(str3)
}
//typealias关键字可以为类型取别名
typealias Price = NSInteger
typealias
var price:Price = 12;
var
⼆、字符串与集合
+和\()结构
var str1 = "hello"
var
var str2 = "world"
var
var str3 = str1 + " " + str2
var
print(str3)//打印hello world “+”操作符可以实现字符串拼接
var
var str4 = "hello \(str2)"
print(str4)//打印hello world 如果str2未定义会报错,
2.isEmpty⽅法
//打印空字符串 ""认为是空字符串
var str5 = ""
var
if if str5.isEmpty {
print("空字符串")
}else
else{
print(str5)
}
//编译报错,Value of optional type 'String?' must be unwrapped to refer to member 'isEmpty' of wrapped base type 'String'    var
var str5:String?
if if str5.isEmpty {
print("空字符串")
}
//打印str3 str4相等 = < >可以进⾏字符串判断
if if str3 == str4 {
print("str3 str4相等")
}
3.数组
Array有别于NSArray
//以下两种写法⼀样,都是声明⼀个NSInteger数组
var array1:[NSInteger] = [0,1,2,3,4,5]
var
var array2:Array<NSInteger> = [0,1,2,3,4,5]
var
//数组判空
if if array1.isEmpty {
print("空数组")
}
//访问数组元素
var
var a = array1[1]
var subArray = array1[0 ... 3]
var
//访问第⼀个元素
var
var b = array1.first
//访问最后⼀个元素
var c = array2.last
var
array1[2] = 15;
var array3:NSArray = [NSArray (array: array1)]
var
//array3[2] = 3;编译会报错,Array有别于NSArray
var
var array4:NSMutableArray = [NSMutableArray (array: array1)]    array4.firstObject
array1.insert(20, at: 0)
4.set类型
Set类型可以实现去重,同样有别于NSSet,NSMutableSet。
可以取两个set的交集、并集、补集等
var
var set:Set<NSInteger> = Set.init()
set.insert(1);
set.insert(3);
set.insert(3);
print(set)//[3, 1]
5.Dictionary类型
/
/下⾯两种声明⽅式等价,都表⽰声明⼀个key为String类型,value为NSInteger类型的字典    //Dictionary也不等价于NSDictionary NSMutableDictionary
var dic1:[String:NSInteger]
var
var dic:Dictionary<String, NSInteger> = Dictionary.init()
var
dic["tom"] = 1
dic["lucy"] = 2
dic["kate"] = 3
var dic2:NSDictionary = NSDictionary.init(dictionary: dic)
var
var dic3:NSMutableDictionary = NSMutableDictionary.init(dictionary: dic)
var
dic3.setValue(6, forKey: "lily")
print(dic3)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。