Swift学习笔记01

变量和常量

变量相当于是内存中的一块存储空间,可以存储一个值而且这个值可以被改变,而常量它的值不能在首次赋值后被再次修改。
定义一个变量的关键字 var
定义一个常量的关键字 let

//声明一个变量
var number1: Int = 1
var number2 = 2
//声明一个常量
let number3: Int = 3
let number4 = 3

数据类型Int 可以不用写,swift会自行推断数据类型。另外在swift里,Int,Double首个字母需要大写。

数值类型和类型转换

在给变量赋值时允许使用运算符计算出数值,但是需要参与运算的各个部分类型保持一致。

let a = 3.5
let b = 7
let c =  a + b 

上面代码中a和b的数据类型不一致,编译时会出错,应改为:

let a = 3.5
let b = 7
let c = a + Double(b)

布尔类型

布尔类型有两种值,true和false。在swift的循环和分支结构中的条件判断,只能使用布尔类型的值

//创建一个布尔类型的值
var isTrue = false

元组

元组这个概念并不是swift的原创,在其他的语言中,早就有了这个概念。在oc中,并没有元组的概念。元组就是将各种类型的值组合在一起的一个复合值

//定义一个元组
var teacher: (String, Int, Double)
teacher = ("小明", 30, 175.5)
print(teacher)
let student = ("张三", 20, 180.0)
print(student.0)//可以通过下标打印元组中的某个元素
//此外还可以给元组的各元素取名
let student1 = (name: "张三", age: 20, height: 180.0)
print(student1.name)
print(student1.age)

元组往往是和函数进行配合使用,一个元组可以认为带有多个值,它可以作为函数的返回值或者参数出现。

可空类型

Swift中引入了可空类型(optional)的概念,可空类型在swift里十分重要。可选值有两种状态,有值(true),和没有值(false)可以用在条件判断的语句中

var optValue: Int? = 8
if optValue { 
   print(optValue)
}

此时optValue有值,判断结果为真,所以执行if{}中的语句

对可选值进行强制解析(确保optValu有值才能强制解析)

var aValue: Int = optValue!

如果optValue没有值却进行强制解析,运行时会出错。
我们可以通过可选绑定来获取可空类型的值

 var optValue: Int? = 8
 if let new = optValue {
  print(new)
 }

系统会判断optValue是否有值,如果有值就将值赋值给new,并且条件为真.执行if{}中的语句.如果optValue没有值,则条件为假,不会执行if{}中的语句。

字符串

字符串的定义

var a: String = "sdkfj到家啦"
let b = "djalksd"

字符串中字符的个数

var b = "abcd哈哈"
print(b.characters.count)

字符串的构造
Swift中的字符串插值,字符串拼接十分的方便

let str1 = "hello,"
let str2 = "world!"
let str3 = str1 + str2 
print(str3) //结果为 hello,world!
var a = 98
var b = "张三"
let c = "\(b)期末考试获得了\(a)分"
print(c) // 张三期末考试获得了98分

字符串的比较
判断是否有前后指定的前后缀

let str4 = "Apple"
if str4.hasPrefix("le") {
    print("hasprefix")
}
if str4.hasSuffix("le") {
    print("hasSuffix")
}

字符串变大写,字符串变小写

print(str4.uppercaseString)
print(str4.lowercaseString)

将字符串转为Int型

let str5: String = "255"
let value: Int? = Int(str5)
let newValue: Int = Int(str5)!
print(value)  //Optional(255)
print(newValue) //255

循环

for 循环

下面用for循环做一个最简单的1-100求和的程序。
可以在for循环中使用范围运算符

var sum: Int = 0
for i in 1...100 {
  sum += i
}
print(sum)

1...100 i的范围是 1,2......100。
1..<100 i的范围是 1,2......99。

while循环

while的特点先判断再循环 有可能一次都不执行

var sum: Int = 0
var i = 1
while i <= 100 {
  sum += i++
}
print(sum)

repeat-while循环

repeat-while循环的特点是先循环,再判断 至少执行一次
提示:repeat-while循环是Swift 2.x中引入的,替代了do-while循环,因为在Swift 2.x中do关键字有了新的意义和用法。

var sum: Int = 0
var j = 1
repeat {
  sum += j++
} while j <= 100
print(sum)

举例

1.1-100以内的猜数字游戏

let a = Int(arc4random_uniform(100))+1
print("请猜一个数字")
var m = inputInt()
var i = 1
while a != m {
if a < m {
    print("再小一点")
}
else {
    print("再大一点")
}
      m = inputInt()
    i += 1
}
print("恭喜你猜对了,你一共猜了\(i)次")

2.百元买鸡(一只公鸡5元,一只母鸡3元,3只小鸡1元)
利用穷举法解决问题

for x in 0...20{
    for y in 0...33 {
       let z = 100 - x - y
        if 5 * x + 3 * y + z / 3 == 100 && z % 3 == 0{
            print("公鸡:\(x),母鸡:\(y),小鸡:\(z)")
        }
    }
}

3.骰子游戏
第一次摇出7点11点玩家胜 ,2点3点12点庄家胜。其他点数则游戏继续,第一轮之后,玩家摇出7点庄家胜,摇出玩家第一次摇出的数字则玩家胜

var money = 1000
while money > 0 {

var needsGoOn = false
func roll() -> Int {
    return Int(arc4random_uniform(6)) + 1
}
let firstPoint = roll() + roll()
print(firstPoint)
switch firstPoint {
case 7, 11:
    print("玩家胜")
    money += 100
    print(money)
case 2, 3, 12:
    print("庄家胜")
    money -= 100
    print(money)
default:
   needsGoOn = true     //游戏继续
}
while needsGoOn  {
    let number = roll() + roll()
    print(number)
    if number == 7 {
        print("庄家胜")
        money -= 100
        print(money)
        needsGoOn = false
    }
    else if number == firstPoint {
        print("玩家胜")
        money += 100
        print(money)
        needsGoOn = false
    }
}
}

数组

创建一个数组

var array1 = [String]()     //创建一个空数组
var array2: [Int] = []   //创建一个空数组
var array3 = ["apple", "grape", "banana", "apple", "orange"]//创建数组的字面量语法
var array4 = [String](count: 100, repeatedValue: "")

获取数组中元素的个数

print(array3.count)

遍历数组中的元素

for index in 0..<array3.count {
    //[]是对数组进行下标运算(取出指定位置的元素)
    print(array3[index])
}
//只读循环,(再循环过程中,不能修改数组中的元素)
for str in array3 {
    print(str)
}
//能取到下标及相应的值
for (index, value) in array3.enumerate() {
    print("\(index).\(value)")
}

向数组中添加元素

array1.append("strawberry")//直接在后面添加元素
array1.insert("waxberry", atIndex: 0)//在指定位置添加元素
array1 += ["abc", "def"]//后面添加元素
let array7 = array1 + array3 //将两个数组合并起来
//更改元素
array3[1...3] = ["www", "eee","yyy"]//更改指定位置的元素

从数组中删除元素

array1.removeAtIndex(2)
array1.removeFirst() //删除第一个
array1.removeFirst(2)//删掉前(2)个
array1.removeLast() //删除全部

数组的复制

let array5 = array3
var array6 = array3[1...3]

举例
30人报数
15个基督教徒,15个非基督教徒围成一圈.报数数到9就死,下一个继续从1开始数.基督教徒都活下来了.问他们的位置

//基督教徒1,非基督教徒0
var die = 0
var times = 0
var index = 0
var peopleArray = [Int](count: 30, repeatedValue: 1)
while times < 15 {
    
    if peopleArray[index] == 1 {
           die += 1
    
    if die == 9 {
        peopleArray[index] = 0
        die = 0
        times += 1
        }
    }
    index += 1
    if index == peopleArray.count {
        index = 0
    }
}

冒泡排序

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

推荐阅读更多精彩内容

  • 53.计算字符 在字符串中获取字符值的数量, 可以使用字符串字符属性中的计数属性: let unusualMena...
    无沣阅读 1,065评论 0 4
  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 4,271评论 1 27
  • swift的基础语法 这样吧,先把swift4.0教材的先分享给大家。swift4和swift3的基本上没有多大的...
    请输入账号名阅读 15,692评论 12 60
  • 总是暖冬。 近两个月前在牡丹广场,见粗矮的月季茎上已迸出了很有劲的红芽,全无冬滋味。这两天和父亲在洛浦,梅花早已恣...
    八里山人程远河阅读 258评论 4 6
  • 如果说,在我的人生轨迹里反差最大的是谁,那一定是我的妈妈。 听说我很小的时候,我妈一抱我我就哭,哭声里咿咿呀呀喊的...
    渡人曦阅读 409评论 2 1