美文网首页iOS学习首页投稿(暂停使用,暂停投稿)
第二篇 Swift 与 Objective-C 的 基本类型

第二篇 Swift 与 Objective-C 的 基本类型

作者: 我是熊大啊 | 来源:发表于2017-12-24 00:44 被阅读3次

基本类型 :字符串、字典、元组、数组、整型、浮点型、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

暂时未有深入了解

篇幅有限,下篇文章介绍 值类型、引用类型、class、struct、enum;

相关文章

网友评论

    本文标题:第二篇 Swift 与 Objective-C 的 基本类型

    本文链接:https://www.haomeiwen.com/subject/bqqqgxtx.html