iOS学习第一周总结——Swift语言

Swift语言是苹果于2014年WWDC发布的新开发语言,可与Objective-C共同运行于和iOS平台,用于搭建基于苹果平台的应用程序。Swift 结合了 C 和 Objective-C 的优点并且不受C兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣。

数据类型

数据类型有整型、浮点型、字符串类型、布尔类型等,整型和浮点型又分为几类。我们平时在使用的时候,输入整数类型一般选择Int;输入小数类型一般选择Double;输入字符串一般选择String;布尔类型只有两种取值true或false。

let a = 4
let b = 3.1416
let c = "apple"
let needsGoNo = true

相同类型的数值是可以参与运算的,数据类型不同时需要转换,String类型可以做加法运算

let a = 2
let b = 1.25
let c = "Hello"
let c2 = "world"
let d = a + Int(a)
let e = c + d

布尔类型经常在循环和分支结构使用

元组

tuple(元组) - 用一个变量或者常量保存多项数据信息的类型

let stu = (1001,"王大锤",true,23) //定义一个四元组
//打印元组第一项内容
print(stu.0)
//取元组stu的第二项和第四项内容
let (_,j,_,k) = stu
print(j)
print(k)

分支结构和循环结构

分支结构

本周讲了Swift中的分支结构:if-else和switch-case-default

  • ** if-else语句**
    下面是一段用if-else语句实现分段函数求值的代码
var x = 1.5
var y: Double
if x < -1 {
    y = 3  x + 5
}
else if x <= 1 {
    y = x
}
else {
    y = 5 * x - 3
}
print(y)
  • switch-case-default语句
    下面是一段用switch-case-default语句实现区分骰子大小的代码
let a = Int(arc4random_uniform(6)) + 1
switch a{
case 1,2,3:
    print("你摇出了小")
case 4,5,6:
    print("你摇出了大")
}

循环结构

循环结构本周讲了for循环,while循环,repeat-while循环

  • for循环
    斐波拉切数列
var a = 1
var b = 1
print(a,terminator:"\t")
print(b,terminator:"\t")
for _ in 0...20{
    print("\(a+b)",terminator:"\t")
    (a,b) = (b,a+b)
}

for循环的嵌套使用 - 打印九九乘法表

for i in 1...9{
    for j in 1...i{
        print("\(i)*\(j)=\(i * j) ",terminator:"\t")
    }
    print("")
}
  • while循环
var sum = 0
var i = 1
while i <= 100 {
  sum += i++
}
print(sum)
  • repeat-while
var sum = 0
var j = 1
repeat {
  sum += j++
} while j <= 100
print(sum)

在很多时候分支结构和循环结构是要一起使用的
求1—10000的完美数

for i in 2...10000{
    var sum = 1
    var j = 2
    while j <= Int(sqrt(Double(i))){
        if i % j == 0{
            sum += j
            if i / j != j{
                sum += i / j
            }
        }
        j += 1
    }
    if sum == i {
        print(i)
    }
}

Craps赌博游戏:投2颗色子 ,首轮 7 ,11为玩家胜利 , 2,3,12为庄家胜利,其余点数继续;之后玩家投到7就输 ,投到和首轮一样的点数玩家就赢

func roll () -> Int{
    return Int(arc4random_uniform(6)) + 1
}
var money = 1000
repeat{
    print("玩家总资产:\(money)")
    var debet:Int
    repeat{
        print("请下注:",terminator:"")
        debet = inputInt()
    } while debet <= 0 || debet > money
    var needsGoOn = false
    let firstPoint = roll() + roll()
    print("玩家第一次摇出了\(firstPoint)点")
    switch firstPoint{
    case 7, 11:
        print("玩家胜")
        money += debet
    case 2, 3, 12:
        print("庄家胜")
        money -= debet
    default:
        needsGoOn = true
    }
    while needsGoOn{
        let currantPoint = roll() + roll()
        print("玩家摇出了\(currantPoint)点")
        if currantPoint == 7 {
            print("庄家胜")
            money -= debet
            needsGoOn = false
        }
        else if currantPoint == firstPoint{
            print("玩家胜")
            money += debet
            needsGoOn = false
        }
    }
}while money > 0
print ("你破产了")

穷举法

穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。

百钱百鸡 :100块买100只鸡,公鸡5块每只,母鸡3每只,小鸡1元每3只

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)")
        }
    }
}

数组

1.数组的创建

var array1 = [Int]()
var array2: [Int] = []
var array3 = [12,121,54,45,7]
var array4 = [Int](count: 100, repeatedValue: 1)
var arrayadd = array1 + array2
var array5 = [String]()
var array6 = ["sa","sa"]
var array7 = [String](count: 10, repeatedValue: "")

2.获取数组元素个数

print(array.count)

3.对数组中的元素进行遍历

//方法1 循环过程中可以改变数组元素
for index in 0..<array3.count{
    if index == 1{
        array3[index] = 123
    }
    print(array3[index])
}
//方法2 只读循环,在循环过程中不能改变数组元素
for str in array6{
    print(str)
}
//方法3
for (_index,value) in array6.enumerate(){
    print("\(_index).\(value)")
}

4.向数组中添加元素

//append 从后边加入,当前下标为0
array5.append("strawberry") 
array5.append("pear") //当前下标为1
//insert插入数据 当前下标为0,之前元素下标一次递增1
array5.insert("waxberry", atIndex: 0)
//在梨和草莓中间加上西瓜
array5.insert("watermelon", atIndex: 2)
 //将柠檬加到数组最后
array5.insert("lemon", atIndex: array5.count)

5.从数组中删除元素

array5.removeAtIndex(0)//删除指定位置
array5.removeFirst(0)//删除前面n个

6.复制数组

var array_5 = array5
var array_5_5 = array5[1..<3]//只复制下标1-3的部分
  • “约瑟夫环”问题
    约瑟夫环”问题:15基督教徒15非基督教徒围一圈,报数到9就杀掉,杀到15个停止,刚好15个非基督教徒被杀死,问开始位置怎么站的
var personsArray = [Bool](count: 30, repeatedValue: true)
var counter = 0 //
var num = 0
var index = 0
while counter < 15 {
    if personsArray[index]{
        num += 1
        if num == 9{
            personsArray[index] = false
            counter += 1
            num = 0
        }
    }
    index += 1
    index %= personsArray.count
}
for person in personsArray{
    print( person ? "基" : "非",terminator:"")
}

冒泡排序和简单选择排序

冒泡排序:两两比较,前面的元素比后面的元素大就交换位置

for i in 0..<array1.count - 1{
    var isChange = false
    for j in 0..<array1.count - 1 - i{
        if array1[j] > array1[j + 1]{
            (array1[j],array1[j + 1]) = (array1[j + 1],array1[j])
            isChange = true  //isChange=true说明发生交换
        }
    }
    if !isChange{
        break
    }
}

简单选择排序:每次从剩下的元素中找最小的元素放到对应位置

var array1 = [255,548,42,456,878,2454,8,54,549]
for minIndex in 0..<array1.count - 1{
    for index in minIndex + 1..<array1.count{
        if array1[index] < array1[minIndex]{
            (array1[index],array1[minIndex]) = (array1[minIndex],array1[index])
        }
    }
}

标识符的命名规则
1.字母(Unicode字符)、数字、下划线,数字不能开头
2.大小写敏感
3.不能使用关键字做标识符
4.驼峰标识(驼峰命名法)- 第一个单词全小写以后每个单词首字母大写
5.见名知意 以上这些就是本周所讲内容。

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

推荐阅读更多精彩内容