基本类型 :字符串、字典、元组、数组、整型、浮点型、double等,其本质又是什么?Swift与Objective-C的不同代码如何使用?
相对于objc而言:
1.首先在objc中没有元组的概念,在Swift中才有
2.String、Dictionary、Array、Int、Double、Float等是值类型(value type)但是NSString、NSArray、NSDictionary等是引用类型;
关于值类型与引用类型的区别,下面论述。
3.在Swift中不存在MutibleArray、MutibleDictionary等,声明变量或者常量只需let、var
4.Swift 必须对声明的变量进行初始化,对关键字“lazy”的属性声明其类型。
5.Swift 强类型,必须制定类型存放变量,不能比较不同类型的变量
6.Swift 可选值,你声明的变量可以是nil
使用:
No1. String
1.声明方式
Swift:
var userName = ""
var userFatherName:String = ""
var userDesc:String? = nil
var userAddr:String! = ""
var userWifeName:String {
set{
print(#line,newValue)
}
get{
return "libai"
}
}
var userChildName:String? = nil{
didSet{
print(oldValue ?? "LiBai \(#line)")
}
willSet{
print(newValue ?? "Libai \(#line)")
}
}
说明:
声明时必须初始化,对于可选类型,在使用的时候为了消除警告,可采用! 或者 ??的方式来使用,对于willset以及didset,可打印默认值监听属性,分别可以获取到newvalue以及oldvalue来做相应处理。
常用方法
userDesc = "http://\\中国人 thought we love123 human!// & - -* -% -$ -# -@"
//拼接
userDesc?.append("a")
userDesc = userDesc?.appending("bcd").appending("efg")
//url 编码
userDesc = userDesc?.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
//提取
let range = userDesc?.range(of: "we")
userDesc = userDesc?.substring(with: range!)
userDesc = "http://\\中国人 thought we love123 human!// & - -* -% -$ -# -@"
userDesc?.hasPrefix("de")//判断前缀
userDesc?.hasSuffix("d")//判断后缀
userDesc?.capitalized//首字母大写
userDesc?.contains("we")//是否包含
userDesc?.components(separatedBy: " ")//根据字符串切割
userDesc?.isEmpty//是否为空
userDesc?.removeAll()//移除
userDesc?.uppercased()//大写
userDesc?.lowercased()//小写
let aStr = "abc"
let bStr = "wab"
let comparison = aStr.compare(bStr)//比较
print (comparison.hashValue)//哈希值 0 1
No2. Dictionary
字典用的地方最多的地方就是涉及到网络的请求的地方,以key-value的形式存储,除了可以储存基本类型外,还可以储存自定义类型,字典是无序的,自带排序方法
var movie : [String:String] = ["name":"可可西里","length":"100","country":"American"]
var movie2 = ["name":"可可西里","length":"150","country":"American"]
for item in movie2{
print(item)
}
for item in movie2.keys{
print(item)
}
for item in movie2.values{
print(item)
}
//排序
movie.sorted { (a, b) -> Bool in
return a.value > b.value
}
//增加
movie2["actor"] = "Jack Cheng"
//删除
movie2.removeValue(forKey: "actor")
movie2.removeAll()
movie.remove(at: movie.index(movie.startIndex, offsetBy: 1))
class User{
var name = ""
var age = 0
var sex = ""
}
//储存自定义类型
var user1 = User()
user1.name = "xiaoming"
user1.age = 10
user1.sex = "man"
user1
var user2 = User()
user2.name = "xiaoming"
user2.age = 10
user2.sex = "man"
var dic1 : [Int:User] = [1:user1,2:user2]
dic1[1]
No3. 数组 Array
数组可以支持基本类型以及自定义类型,可以声明类型,也可以让其自动推断,同样提供排序的方法,删除,增加等比较简单
class User{
var name = ""
var age = 0
var sex = ""
}
var user1 = User()
user1.name = "xiaoming"
user1.age = 10
user1.sex = "man"
var user2 = User()
user2.name = "xiaoming"
user2.age = 10
user2.sex = "man"
let array = [user1,user2]
//遍历
for (i,user) in array.enumerated(){
print(i,user)
}
for user in array{
print(user)
}
array.insert(User(), at: 1)
array.remove(at: 1)
array.append(User())
array.customMirror
array.sorted { (u1, u2) -> Bool in
return u1.age>u2.age
}
No4. 元组
由于在objc中没有元组,所以听说元组是在python中,Swift中也是有元组的, 元组(tuples)把多个值组合成一个复合值。元组内的值可以使任意类型,并不要求是相同类型。用python的角度讲,他不是迭代器,因此不可以遍历,用Swift来讲,他没有遵守Sequence协议
元组不可变
let movielist = ("dog",123,23.000,user1)
movielist.0
movielist.2
var (a,b) = (movielist.0,movielist.1)
No5. Int、double、Float
暂时未有深入了解
网友评论