Swift - 基本语法(一)

作者: 重庆妹子在霾都 | 来源:发表于2017-08-18 10:40 被阅读750次

写在前面

1.Swift保持了OC的参数命名系统,但是在语法上更简洁,可读性更强 代码更容易被维护
2.Swift安全性更高
3.Swift在编译和运行上都经过了更精确的优化 所以相比更快
....

一.常量和变量

常量用let来表示,一旦赋值就不能再被改变
变量用var来表示,赋值之后还可以再改变
如:
let number1 = 100
var number2 = 99
Swift是一门类型安全(type safety)的语言,虽然没有确定变量类型 其实已经有类型了

Q:Swift如何来显式声明类型呢?

var str:String // 表示显式声明了str是String类型的变量
str = "Sunshine"

var num1, num2, num3:Double // num1, num2, num3都是Double类型的变量
num1 = 1.0
num2 = 2.0
num3 = 3.0

// Double是64位的浮点数,Float是32位的浮点数,一般来说Double精确到小数点后面15位,Float精确到小数点后面6位

let binaryInt:Int = 0b1001 // 0b:二进制的数据前缀

Q:强制类型转换?
强制类型转换:在需要转换的变量之前加上(需要转换的类型),转换的类型需要用()

let number_a:Int = 3
let number_b:Double = 0.1415926
let pi:Double = (Double)(number_a) + number_b

Q:字符串拼接?

let 姓名:String = "Sunshine"
姓名 + ",你好!" // Sunshine,你好!

二.布尔类型和if语句

布尔值用truefalse来表示,全是小写
if语句的{}必不可少,即使{}里面只有一句话也不能省略
Swift里面没有把非0的值作为真的这种说法

let imtruevar = true
let imfalsevar = false
if imtruevar {
    print("I am true")
}else {
    print("I am false")
}

if 3 + 4 == 7 {
    print("3 + 4 =7")
}else {
    print("I am false")
}

三.Swift元组 Tuples

元组:将多个不同的值集合成一个数据 如(true,"Sunhsine","女"),它是Swift新引进的一种新的数据类型
元组的特点:1 - 可以有任意多个值
2 - 不同的值可以是不同的类型

// 第一种写法
let tuplesregisterResult = (true, "Sunshine", "女")
let (isRegisterSucc, name, sex) = tuplesregisterResult
isRegisterSucc // true
name // Sunshine
sex // 女

// 第二种写法
let tuplesregisterResult = (isRegisterSucc:true, name:"Sunshine", sex:"女")
tuplesregisterResult.isRegisterSucc // true
tuplesregisterResult.name // Sunshine
tuplesregisterResult.sex // 女

在提取元组数据时可能对某部分数据不关心,可以使用下划线_忽略部分数据
如:

let loginResult = (true, "sunshine")
let (isloginsucc, _) = loginResult
if isloginsucc {
    print("登录成功")
}

Q:元组如何显式的声明数据类型?
,隔开,声明每个变量的类型,如:
let connectResult:(Int, String) = (404, "Not Found")

四.可选型 Optionals

Optionals:可选值
1 - 或者是一个值 或者是没有值
2 - 没有值时为nil
Q:如何显式的将一个变量声明成可选值?
var imoptionalvariable:Int?

let userInput = "sunshine";
var age = Int(userInput) // 把userInput转化为Int
// age! 表示age一定是有值的 就用!
if age != nil {
//    print("your age is \(age!)")
//    print("your age is" + String(age)) // 强制类型转换不能针对可选值 所以这样写会出错
    // age! 可以叫做是可选型的解包
     print("your age is" + String(age!))   
}else {
    print("inpunt is not avariable")
}

let string_a:String! = "Sunshine" // 表示在声明的时候就明确表示string_a是有值的。

五.基础运算符

let a = 10
let b = 5
var c = 0

a + b
a - b
a * b
a / b
a % b
// ? : :  //  条件运算符

//  这也是Swift更安全的一个体现
Int.max + 1 // 报错 溢出的错误
Int.min - 1 // 报错
// 其他运算符:a === b a !== b

六.聚合运算符

// a ?? b  等价于: a != nil ? a! : b
// 聚合运算符有两个要求: 1 - a必须是可选类型  
                      2 - b的类型必须是a相同的a必须是可选类型
var userName:String?
userName = "sunshine"
if userName != nil {
    print("Hello my name is \(userName)")
}else {
    print("Hello guest")
}

// 等价于下面的写法
let outputName:String = userName != nil ? userName! : "guest"
print("Hello" + outputName)

// 等价于下面的第一种写法
let outputName:String = userName ?? "guest"
print("Hello" + outputName)

七.区间运算符和for - in循环

// 闭区间[a, b]  等价于  a...b
// 前闭后开区间[a,b)  等价于  a..<b
for index in 1...10 {
    index // index 是个常量
}

八.逻辑运算符

!a
a && b
a || b

九.String和Character

let str1 = "I am a immutable string" // 表示不可变字符串
var str2 = "I am mutable string"// 可变字符串

str2 = "Sunshine"
str2 += ",你好!" // 打印的结果是:Sunshine,你好

Q:如何定义一个空字符串?

var empty_str1 = ""
var empty_str2 = String()
empty_str1 += "Sunshine" // empty_str1变成Sunshine
empty_str1.isEmpty // 来判断当前字符串是否为空

使用for - in循环循环来遍历字符串

for c in empty_str2 {
    print(c) // 会打印出字符串中的每个字符
}

声明一个Character的数据类型

var ch:Character = "s" // 此时的ch就是Character的数据类型 里面只能有一个字符
empty_str2.append(ch)
empty_str2.appending("hello")
PS:允许两个字符串相加 但是不允许字符串和Character类型的相加

计算字符串的长度
str1.characters.count

十.String的基本操作

字符串插值:(要插入的字符串)

var inter_str1 = "Sunshine"
var inter_str2 = "你好"
print("\(inter_str1),\(inter_str2)")// 打印结果:Sunshine,你好

字符串的比较

let com_str1 = "abc"
let com_str2 = "abc"
let com_str3 = "accd"
let com_str4 = "abcd"
com_str1 == com_str2 // 结果为true
// 使用字典序来比较字符串
com_str1 < com_str3 // 结果为true
// 注意:使用字典序是不用看它的长度的
com_str3 > com_str4 // 结果为true

字符串的前缀和后缀

// hasPrefix:是否有前缀
// hasSuffix:是否有后缀

let arrs = ["第一章:1.1","第一章:1.2","第一章:1.3","第二章:2.1","第二章:2.2","第二章:2.3","第二章:2.4","第二章:2.5","第三章:3.3","第三章:3.3","第三章:3.3"]
var count = 0
for name in arrs {
    if name.hasPrefix("第二章") {
        count += 1 // count++ 在Swift3之后已经被废弃 不能使用
    }
}
print("第二章总的章数 - \(count)") //  打印结果:第二章总的章数 - 5

相关文章

网友评论

    本文标题:Swift - 基本语法(一)

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