iOS Developer

Swift的第一周爬坑之路

2016-08-07  本文已影响0人  Xyk_

提笔。难。

难在瞎写对不起自己的学习成果;难在有套路却乏于运用;难在Po文又将提起我人生中的Bug——循环!

落笔。希望生辉。
  以下则是我的学习心得,各位看客轻喷 ...

1.字符串插值

(1). 如上所述,在swift中有了这个字符串插值,我们将更好的插入、取出其值。而在括号里面可以进行同类型的变量(常量)之间的运算
 (2).代码演示:

  let a = 5
  let b = 5
  print("\(a) + \(b) = \(a + b)")
   打印结果为:5 + 5 = 10

(3).评价:第一感觉就是好玩,之后用起来还真是得心应手 😜
 实用性:★★★★★
 易用性:★★★★★
 推荐性:★★★★★

2.元组

(1).元组(tuples)是把多个值组合成一个复合值。元组内的值可以采用不相同类型。
 (2).代码演示:

  let stu = (001, "Xyk_",true,18)
  let stu:(id:Int , name:String , gender:Bool , age:18) = (001, "Xyk_",true,18)
  // 以上就是两种元组的赋值方式

  print(stu.0)
  print(stu.id)
  //两个输出都是进行的元组的第一项内容输出

(3).评价:元组的置换(稍后提示~)将使你在你的Swift代码人生中产生不一样烟火 🌝
 实用性:★★★★★
 易用性:★★★★★
 推荐性:★★★★★

3.分支语句

(1).分支语句,即为多条件分多步执行的以实现不同的功能或方法。而此语句必须是先判断后执行
 (2).代码演示:

if ... (else if ... ) ... else
//省略号处写上该分支的执行条件(必不可少)

switch(表达式) {
      case 值 :
               执行表达式
      .
      .
      .
      case 值 :
               执行表达式
      default:
               执行表达式
}
//其中的值是类似if...else结构中的条件
//执行表达式中强调break 和 continue 
//continue是终止本次循环进入下一个循环,切记是终止不是中止更不是中指 😏
//break 就是终止循环

let a = 5 
let b = 5
let c = a > b ? a : b 
print(c)
打印结果是 5
//三元条件运算:?前面是先决条件。以此为例,像是中文中的发问 —— a大于b吗?
//很明显这里是否定的,所以执行的结果是后面的b的值。
//因此,冒号前后执行的条件判断是前真后假。 

(3).评价:分支语句的运用之处相当多,简单又低调,入门级信心好帮手 🙊
 实用性:★★★★★
 易用性:★★★★
 推荐性:★★★★

3.循环语句——人生中无法抹去的痛 🙄🏼

(1).顾名思义,循环就是重复重复再重复,直到找到答案(条件不再满足)才结束循环
                          ——你开心就好 🌚
 (2)本周循环讲述了 for循环、while循环和repeat ... while循环,而三者之间的差距在于我就在你后面你却不让我执行💀——repeat ... while 先予执行一次再来判断,而while、for则是必须先谈条件再说接下来的事情,好一个霸道总爱上我🌚
  再说Swift中的循环与其他的差别,那一定它只支持自增而舍去了自减,还有就是把do...while变成了repeat...while 😱 
  并且格式也改成了:
    for _ in 1...10
    for _ in 1..<10
    ... ...
 ————WTF?————
(3).代码演示:

for _ in 1...10 {
    print("Hello, world!")
}
//打印十次 Hello, world! 且被默认换行了。也就是在控制台竖着打了10次
// _ 这个符号表示省略的意思,当然你也可以写个乱七八糟的东西上去来代替它。
//但是老师曾说,你要让看你代码的人把膝盖送给你😈

什么?想要横着打?

for _ in 1...10 {
    print("Hello, world!",terminator:" ")
}
//这就打印了十次且两两之间隔着空格的Hello, world! 
//terminator:"这可以添加制表符\t、换行符\n、 空格等等"

(4).评价:当然这样看来循环还是很简单的嘛,那只能是这样看来...这样看来...看来...🌚 循环的博大精深你不入坑怎么知道它害不死你🌚只要是个语法就能和循环用,比如你帅你先打个菱形或者来个完美数运算要不然你算算Craps或者分个鱼?
 然而我的心愿是世界和平 🙏🏼

实用性:★★★★★
  易用性:★★ (我丑人多作怪)
  推荐性:★★★★★

NIYIWEIZHESHIWODACUOLEMEIYOUGAIHUOZHENIYIWEIXUNHUANJIUZHEMEJIESHULE ?

图样图森破
   图样图森破
      图样图森破
         233333
 (5).循环的题有千千万,做不完更背不完,我一位德不高望不重的小神级学长说,只有屌丝才背代码🌚 没错,我以前就是屌丝🙄 但是,从今天起我不愿再做屌丝了 所以在循环部分的最后想和大家说一下我的心得和困苦:
  ①.想必大家和我一样,循环只要一嵌套就懵了。我起初的困苦是拿笔来写写画画以求心里安慰,可是并没有实质性的解决问题。然后执行打点来寻求每一步的变法,这很有用,这很入门。

打点在这里就不提供演示了,各位看客保重,小司机可向老司机求教

②.方法没有搞对,不知道循环从哪里开始。所以从结尾入手,猴子吃桃、99乘法表、分鱼都强有力的解决了。

//猴子每天吃掉比前一天一半还多一个的桃子,最后一天剩下一个,共9天
var sum = 1
for _ in 1...9{
    sum = (sum + 1) * 2
}
print(sum)


//分鱼
var total = 1
while true {
    // 用当次循环时total的值作为鱼的总数
    var fish = total
    // 假设鱼的数量足够五个人分
    var isEnough = true
    // 通过循环模拟五个人分鱼的过程
    for _ in 1...5 {
        // 检查剩下的鱼是否够分
        if (fish - 1) % 5 == 0 {
            fish = (fish - 1) / 5 * 4
        }
        else {
            // 如果鱼不够分就将isEnough赋值为false并提前结束分鱼的循环
            isEnough = false
            break
        }
    }
    // 循环结束后如果isEnough仍然是true就说明当前的鱼足够五个人分就打印total的值并终止循环
    if isEnough {
        print(total)
        break
    }
    total += 1
}

③.打印输出图形这简直是看似简单确实也很简单的一个事情。以菱形为例——别上来就体现自己高超的数学技能,别算横纵,只算横排,数清空白,算好*号;划分菱形为上下两半,找好公式,一算一个准
  ④.我现在最大的困扰就是不知道该如何将理解到的、题意中的重要信息给变换成程序语言,或者说是不知道哪些重点该运用在哪个循环里面,虽然我觉得我上面的总结还是帮助我了很多,但我现在依旧懵,就像这段话一样,在我脑子里重复了很多次还是没能准确的表达我的困苦,所以循环一生伤 😭

4.数组 ——循环劫难后的重生 🙇🏻

(1).所谓数组,就是相同数据类型的元素有序或无序排列的集合(预备,唱:黑板上排列组合/你舍得解开吗 💑 ),然后用编号区分他们的变量或常量的集合。
  (2).代码展示

var myArray1 = [String]()
var myArray2: [String] = []
var myArray3 = ["1", "2", "3", "4", "5"]
var myArray4 = [String](count: 100, repeatedValue: "")
//1. 4种创建方式

print(myArray3.count)
// 2. 获取数组元素个数


for index in 0..<myArray3.count {
    // []是对数组进行下标运算(取出指定位置的元素)
    print(array3[index])
    if index == 1 {
        myArray3[index] = "改改改"
    }
}
// 3. 对数组中的元素进行遍历

所以在数组中又出现了循环还是让人最头疼的for循环,相比于之前的淡出你学习循环,数组加循环的结构还是让人没那么想自杀,而数组的遍历(循环)也有下面几种区别:

//不需要下标直接输出的数组用这个
for num in myArray3 {
    print(num)
}


//需要下标
for i in 0..<myArray3.count{
    print("\(i+1)__\(mathArray[i])")
}


//需要下标又要值,下标是个值,可以放到其他数组里面用
for (index,value) in myArray3.enumerate(){
    print("\(index+1)__\(value)")
}

数组的其他简单操作:

// 4.  向数组中添加元素:

myArray3 += ["strawberry"]
myArray3.append("pear")
//以上两者均是在末尾添加
myArray3.insert("waxberry", atIndex: 0)
myArray3.insert("watermelon", atIndex: 2)
//以上两者在指定位置添加
myArray3.insert("lemon", atIndex: myArray3.count)
//用insert方法在末尾添加
// 5. 从数组中删除元素:

myArray3.removeAtIndex(这里写指定的下标以完成删除指定元素)
myArray3.removeFirst()
myArray3.removeAll()
// 6. 数组的复制:

var myArray5 = array3
myArray5[0] = "6"
var myArray6 = myArray3[1...3]
// 将myArray3的第二个到第四个元素赋给myArray6
// 7.  数组的运算:

let  myArray7 = myArray5 + myArray6
// myArray7呈现的是myArray5完了之后紧接着myArray6的元素

// 8.  数组的排序:

let newArray = array.sort()
print(newArray)
//在新数组中排序
myArray3.sortInPlace()
print(array)
//在原数组语句中排序

在Swift中的方便排序sort()方法后还有两个需要我们牢记的排序的方法——选择排序和冒泡排序

//简单排序的方法:第一趟找第一小的,第二次找第二小的,第三次找第三小的,以此类推...
//(每次从剩下元素中找最小的元素放到对应的位置)
var array = [29, 98, 35, 12, 47, 66, 53, 79]
for i in 0..<array.count - 1 {
    var minIndex = i
    for j in i + 1..<array.count {
        if array[j] < array[minIndex] {
            minIndex = j
        }
    }
    (array[i], array[minIndex]) = (array[minIndex], array[i])
}
print(array)
//打印结果是 :[12, 29, 35, 47, 53, 66, 79, 98]


//冒泡排序:两两比较,前面的元素比后面的元素大就交换位置
//n个元素比较只做n-1的比较
//优化后的排序
var array = [29, 98, 35, 12, 47, 66, 53, 79]
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
    }
}
//打印结果是 :[12, 29, 35, 47, 53, 66, 79, 98]

Tips:数组的遍历,其执行时从0~元素个数减1。
 (3).评价:数组的加入有助于更好的理解循环,棒 😬
  实用性:★★★★★
  易用性:★★★☆
  推荐性:★★★★

所以,在数组的最后想要和大家探讨一个关于使用循环和数组的组合方法来求的一道题:
  异教徒的站位——15个基督教和15个异教徒同乘一船航行,遇险,要全船人的一半投入海中,并议定30人围成一圈,由第一人数起,挨个报数,每数到第9个人,投海,最后基督教徒全部活了下来。

我们的或者说我的盲区是判断了站位的循环怎么去做,if so , I'll never get the right and esay way to solute the problem I made.
所以我们还换位思考应该是从没有扔满15个人一直重复的循环

var peopleArray = [Bool](count: 30, repeatedValue: true)
var counter = 0 //投海数量
var num = 0  //报数数字
var index = 0 //数组下标
while counter < 15{
//    报数以及投海
    if peopleArray[index]{
        num += 1
        if num == 9{
            peopleArray[index] = false
            counter += 1
            num = 0
        }
    }
    index += 1 //投海了的人就直接加1跳过
//    index %= peopleArray.count
    if index == peopleArray.count{//投海的下一个人就是归0
        index = 0
    }
}

for person in peopleArray{
    print(person ? "教徒 " : "非教徒 ",terminator:"")
}
print("")

//站位
教徒 教徒 教徒 教徒 非教徒 非教徒 非教徒 非教徒 非教徒 教徒 
教徒 非教徒 教徒 教徒 教徒 非教徒 教徒 非教徒 非教徒 教徒 
教徒 非教徒 非教徒 非教徒 教徒 非教徒 非教徒 教徒 教徒 非教徒 

救护车分为两种——一种是有医有医,一种是无医无医,愿天下所有程序猿的能上“有医有医的救护车”。
  至少,我的心里还有诗和远方以及心灵砒霜。
                            ——写在最后

上一篇下一篇

猜你喜欢

热点阅读