Swift - 基本语法(一)

写在前面

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 4,275评论 1 27
  • 如果创建的是 OS X playground 需要引入 Fundation 如果我们想创建 iOS playgro...
    kled_net阅读 490评论 0 0
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,771评论 1 10
  • 人需要一个个够大够高的舞台去历练和展示自我。如美国普林斯顿大学动物刘锦程,对外汉语教师都可以做到非常成功的程度。
    自由之我阅读 188评论 0 0
  • 当我得知自己可以去台湾旅游的时候内心是狂喜的。我第一时间想到的不是别的,就是美食。多少年,当身边去过台湾的朋友提起...
    空想之道阅读 565评论 0 0