Swift基础知识

1 整数类型Int,长度与当前平台的原生字长相同:

  在32位平台上,Int和Int32长度相同;

  在64位平台上,Int和Int64长度相同。

2 对于浮点数(float,double)的数据,可以将数据用下划线分割,使其看起来一目了然。

let a = 100_0000_0000        // 10000000000
let b = 1_00.00_001_0002_1      //100.0000100021

3 元组Tuple

let error:(code: Int, message: String) = (404, "Not Found")
error.code       // 404             
error.message    // Not Found

let point = (x: 10, y: 20)
point.x   // 10 
point.y   //20  

4 print

let a = 1, b = 2, c = 3
print(a, b, c)
print(a, b, c, separator: "--")
print(“Hello")
// 默认情况下 separator是空格,terminator是换行
print(a, b, c, separator: "--", terminator: ":)")
print("Hello")

// 打印结果
1 2 3
1--2--3
Hello
1--2--3:)Hello

 5 switch:

  (1)可以对任何数据类型做判断

  (2)如果其中有某个语句什么都不做的话,可以使用“break”或者“()”。

let score = 80
switch (score) {
//可以使用区间
case 0 ..< 60 : print("failed") case 60 ..< 80 : print("Just so so") case 80 ..< 90 : print("good") case 90 ..< 100 : print("great"); case 100: print("perfect"); default: // 这个分支中什么都不做,可以使用“()”或者“break” () }

   (3)fallthrough:执行完一条语句后,会直接跳入下一个case语句继续执行,不论条件是否满足都会执行。

let point = (0, 0)
switch(point) {
case (0, 0):
    print("It is origin")
    fallthrough
case (_, 0):
    print("It is on the x-axis")
    fallthrough
case (0, _):
    print("It is on the y-axis")
    fallthrough
default:
    print("It is just an ordinary point.")
}
// 打印结果:
It is origin
It is on the x-axis
It is on the y-axis
It is just an ordinary point.

    加了fallthrough语句后,紧跟的后一个case条件不能定义常量和变量。

switch(point) {
case (0, 0):
    print("It is origin")
    fallthrough
case (x, 0):       // 会报错,fallthrough后的下一个case语句不可以定义常量或变量
    print("It is on the x-axis")
}

    执行完fallthrough语句后,直接跳到下一个case中去执行。fallthroungh后的语句不会执行。

let p = "girl"
switch p {
case "girl":
    print("小女孩");
    fallthrough
    print("这是一个小女孩")   // fallthrough后的这条语句不会执行,直接跳到下一个case中,不论下一个case的条件是否满足,都会执行下一个case中的语句
case "boy":
    print("小男孩")              
default:
    ()
}
// 打印结果
小女孩
小男孩

 6 where配合case的使用

let age = 19
switch age {
case 10 ... 19:
    print("You are a teenage")
default:
    print("You are not a teenage")
}

// 以上的switch可以写为下面的if条件判断
if case 10 ... 19 = age {    // 注意只能写为 10 ... 19 = age, 不可以写为 age = 10 ... 19
    print("You are a teenage")
} else {
    print("You are not a teenage")
}

// if条件判断后,可以继续限制条件,通过“,”添加条件即可
if case 10 ... 19 = age, age >= 18 {
    print("You are a teenage and in a collage")
}

// 打印结果
You are a teenage
You are a teenage
You are a teenage and in a collage
for i in 1 ... 100 {
    if (i % 3 == 0) {
        print(i);
    }
}
// 以上代码可以改写为以下的代码
for case let i in 1 ... 100 where i % 3 == 0 {
    print(i);
}

 7 String、 Character

let a: Character = "a"                 // a
let b: Character = ""        //
let c: Character = "\u{1F60F}"   // 😏
let d: Character = "😎"     // 😎

var m = "abcdef"
m.characters.count       // 6
var n = "数据结构和算法"
n.characters.count       // 7

let str1 = "😎😎😎😎😎"
let str2: NSString = "😎😎😎😎😎"

str1.characters.count     // 5
str2.length          // 10 
let a: Character = "a"                 // a
let b: Character = ""           // 张 
let c: Character = "\u{1F60F}"      // 😏
let d: Character = "😎"          // 😎

 var m = "abcdef"

  m.characters.count          // 6

 var n = "数据结构和算法"

 n.characters.count          // 7

  let str1 = "😎😎😎😎😎"

  let str2: NSString = "😎😎😎😎😎"

  str1.characters.count    // 5

  str2.length          // 10

 8 集合操作

var skillsA: Set = ["Objective-C", "Swift"]
var skillsB: Set = ["HTML", "CSS", "JavaScript"]
var skillsC: Set = ["Swift", "HTML"]

// union 并集
let skillsD = skillsA.union(skillsB)              // {"Objective-C", "Swift", "HTML", "CSS", "JavaScript"}

// intersection 交集
let skillsE = skillsA.intersection(skillsC)       // {"Swift"} 

// subtracting 差集
let skillsF = skillsA.subtracting(skillsC)      // {"Objective-C"}

// isSubset: 判断一个集合中的值是否也在另一个集合
// isStrictSubset: 判断一个集合是否是另一个集合的子集合,并且两个集合不相等
skillsF.isSubset(of: skillsA)     // true
skillsF.isSubset(of: skillsF)     // true
skillsF.isStrictSubset(of: skillsA)  // true
skillsF.isStrictSubset(of: skillsF)  // false

// isSuperset isStrictSuperset 同上面的isSubset isStrictSubset
skillsA.isSuperset(of: skillsF)       // true
skillsA.isSuperset(of: skillsA)       // true
skillsA.isStrictSuperset(of: skillsF)  // true
skillsA.isStrictSuperset(of: skillsA)  // false

// isDisjoint 判断两个集合是否完全没有交集
skillsA.isDisjoint(with: skillsB)    // true
skillsA.isDisjoint(with: skillsC)    // false   

9 选择合适的数据结构

 (1)数组:有序(查找的时间复杂度O(n))

 (2)集合:无序、唯一性、集合操作、快速查找(查找的时间复杂度O(log n))

 (3)字典:键-值数据对(查找的时间复杂度O(1))

10 ==判断两个值类型的数据是否相等;===判断两个引用类型的数据是否相等,即判断两个对象是否指向的是同一块内存。

class Person {
    var name: String
    var age: Int
    init (name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

let p1 = Person(name: "Tom", age: 20)
let p2 = p1
//p1 == p2   // 不可以这样写 p1 === p2    // true

 

posted @ 2017-03-06 13:21  紫洁  阅读(285)  评论(0编辑  收藏  举报