对于Swift的初步了解

我与Swift的第一次接触

1.  关于Swift

(1)简介

Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用。Swift 结合了 C 和 Objective-C 的优点并且不受C兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣。Swift 是基于成熟而且倍受喜爱得 Cocoa 和 Cocoa Touch 框架,他的降临将重新定义软件开发。

Swift 将现代编程语言的精华和苹果工程师文化的智慧结合了起来。编译器对性能进行了优化,编程语言对开发进行了优化,两者互不干扰,鱼与熊掌兼得。Swift 既可以用于开发“hello, world”这样的小程序,也可以用于开发一套完整的操作系统。所有的这些特性让 Swift 对于开发者和苹果来说都是一项值得的投资。

(2)我对Swift的第一印象

Swift对于以前的我是一项完全陌生的编程语言,但是通过两周时间的接触,我觉得它对于编程新手来说是相当友好的。它是一种工业级品质的系统编程语言,但是却和脚本语言一样,写起代码来轻松愉快。在编写代码过程中,最大的感觉就是少了很多繁琐的内容,譬如,如果输出一句“Hello, word!”,在Swift中只用一个语句就可以输出。

print("Hello,world!")

2. 标示符的命名规则

1. 字母、数字、下划线组成,数字不能开头;
  2. 对大小写敏感(即区分大小写);
  3. 不能使用关键字做表示符;
  4. 驼峰标识:第一个单词全小写,以后每个单词的首字母大写。

小知识点归纳

(1) 输出Double类值的精确度(保留两位小数):

print("周长:%.2f" 2 * M_PI * r)

(2) 字符串插值:

print("a =",terminator: "")
let a = inputDouble()
print("b =",terminator: "")
let b = inputDouble()
print("\(a) + \(b) = \(a + b)")
print("\(a) - \(b) = \(a - b)")
print("\(a) * \(b) = \(a * b)")
print("\(a) / \(b) = \(a / b)")

(3) Swift中加减乘除运算的左右两边类型必须一致。

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

let stu: (id: Int,name:String, gender:Bool, age:Int) = (1001, "王大锤", true, 23)

(5)用元组交换两个变量的值:

print(x)
print(y)
(x, y) = (y, x)
print(x,y)

3. 循环体

1.repeat-while循环:至少执行一次

let answer = Int(arc4random_uniform(100)) + 1
var thyAnswer:Int
var counter = 0
repeat {
    counter += 1
    print("请输入你猜的数字:",terminator:"")
    thyAnswer = inputInt()
    if thyAnswer > answer {
        print("小一点")
    }
    else if thyAnswer < answer {
        print("大一点")
    }
    else {
        print("恭喜你猜对了!你总共猜了\(counter)次")
    }
}while thyAnswer != answer

if counter > 7 {
    print("你的智商改充值了")
}

说明:这是一个猜数字游戏的循环应用,游戏规则是在1~100之间猜一个数字,直到猜中为止,这里面利用了repeat-while循环。

2.while循环:有可能一次都不执行

func isPrime(n: Int) -> Bool {
    var i = 2
    while i <= Int(sqrt(Double(n))) {
        if n % i == 0 {
            return false
        }
        i += 1
    }
    //如果上面的循环没有返回false就说明在2到n开根号之间没有n的因子 因此返回true表示n是素数
    return true
}
for n in 1...100 {
    if isPrime(n) {
        print(n)
    }
}

注:打印1-100之间所有的素数!

3.for循环

print("num =",terminator:"")
let num = inputInt()

for i in 2..

注:输入一个正整数,判断是不是素数(质数)

4.  数组

(1)创建数组

var array1 = [Int]()
var array2: [Int] = []
var array3 = [99, 12, 34, 456, 7]
var array4 = [Int](count: 100, repeatedValue: 1)
var array5 = [String]()
var array6: [String] = []
var array7 = ["apple", "grape", "banana", "apple", "orange"]
var array8 = [String](count: 100, repeatedValue: "")

(2)获取数组的元素的个数

print(array1.count)
print(array2.count)
print(array3.count)
print(array4.count)

(3)对数组元素进行遍历

for i in 0..

(4)数组中添加元素

array5.append("strawberry")
array5.append("pear")                  //追加 (在后面添加)
array5.insert("waxberry", atIndex: 0) // 插入(在指定位置插入)
array5.insert("watermelon", atIndex: 2)
array5.insert("lemon", atIndex: array5.count)
print(array5)

(5)数组中删除元素

array5.removeAtIndex(2) //删除指定位置的元素
print(array5)
array5.removeFirst()     //删除第一个元素
print(array5)
array5.removeAll()       //删除全部元素
print(array5)

(6)数组的复制

let array9 = array7       //全部复制
array7[0] = "pitaya"
print(array7)
print(array9)
var array10 = array7[1...3] //复制指定区域的元素
print(array10)

(7)数组的加法

let array11 = array7 + array9
print(array11)

说明:必须是同种类型的才能想加。

5.  数组的排序

(1)Swift中自带的排序

var array = [29, 98, 35, 12, 47, 66, 53, 79]
let newArray = array.sort(>)   //降序: >
print(array)
print(newArray)

array.sortInPlace()
print(array)

var str = ["a", "j", "u", "i", "h", "d"]
let newstr = str.sort()
print(newstr)

str.sortInPlace(>)
print(str)

说明:Swift中自带的排序默认为升序,要想打印出降序就将参数设为“>”。Swift中不仅可以对数值类型的进行排序,也可以对非数值类型进行排序。

(2)简单选择排序

var array = [29, 98, 35, 12, 47, 66, 53, 79]
for i in 0..

说明:简单选择排序———每次从剩下的元素中找最小的元素放到对应的位置。
  我的总结:

不管是哪种程序,重要的是要理清楚其中的思路及思想,在简单排序中,先创建一个整数类型的数组,当然,首先定义变量或常量,在这里我们先定义一个变量 minIndex并赋予初值i,是表示我们第一个数为最小值,然后利用循环进行两两比较,如果后边的数array[j]小于前面的array[minIndex],则将array[j]的值赋予array[minIndex],如果后边的数array[j]大于前面的array[minIndex],继续和后面的比较,直到最后为止。

(3)冒泡排序

var array = [29, 98, 35, 12, 47, 66, 53, 79]
for i in 0.. array[j + 1] {
            (array[j], array[j + 1]) = (array[j + 1], array[j])
            swapped = true
        }
    }
    if swapped == false {
        break           //如果在一次循环中没有发生交换,立即终止。
    }
}
print(array)

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

我的总结:

在冒泡排序中也是用了for循环的嵌套,外面的for循环是对数组的排序,里面的for循环是对数组内的两两之间进行比较的循环,冒泡排序是两两比较后将大的后移,第一轮找到最大值并放到数组的最后的位置。如果在其中的一轮没有发生交换,添加了判断语句,就要执行该语句立即终止循环,因为那时已经排好序了,不需要在浪费时间!

6. 一些用例的总结

(1)Craps赌博游戏

游戏规则:
第一次摇出7点和11点,玩家胜!
   摇出2,3,12点,庄家胜。
   其余的点继续
第二次:摇出7点,庄家胜
   与第一次摇出的点一致,玩家胜
   其余的点继续。

func roll() -> Int {
    return Int(arc4random_uniform(6)) + 1
}

var money = 1000

repeat {
    print("玩家总资产:¥\(money)元")
    
    var debt:Int
repeat {
    print("请下注:", terminator:"")
    debt = inputInt()
    } while debt <= 0 || debt > money

    var needsGoOn = false
    let firstPoint = roll() + roll()
    print("玩家摇出了\(firstPoint)点")
    switch firstPoint {
    case 7, 11:
        money += debt
        print("玩家胜!!!")
    case 2, 3, 12:
        money -= debt
        print("庄家胜!!!")
    default:
        needsGoOn = true         //游戏继续
    }

    while needsGoOn {
        let currentPoint = roll() + roll()
        print("玩家摇出了\(currentPoint)点")
        if currentPoint == 7 {
            money -= debt
            print("庄家胜!!!")
            needsGoOn = false
        }
        else if currentPoint == firstPoint {
            money += debt
            print("玩家胜!!!")
            needsGoOn = false
        }
    }
} while money > 0
print("你破产了!!!")

解释与说明:
  变量与常量的定义不再说明,这里产生随机数用了函数的调用,
需要注意的是能用常量就不用变量,变量或常量定义的范围越小越好。

(2)百钱百鸡

要求:
  顾名思义,就是用100元钱买一百只鸡,
  公鸡5元一只,母鸡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)")
        }
    }
}

说明:这里应用了穷举法。
   穷举法(穷举所有的可能性直到找到正确答案)

(3)输入两个数,输出最大公约数和最小公倍数

print("第一个数:",terminator:"")
let num1 = inputInt()
print("第二个数:",terminator:"")
let num2 = inputInt()
var j = min(num1, num2) 
//var j = num1 < num2 ? num1 : num2
while j >= 1 {
    if num1 % j == 0 && num2 % j == 0{
        print("最大公约数为:\(j)")
        print("最小公倍数:\(num1 * num2 / j)")
        break
    }
    j -= 1
}

4.学生成绩统计

var namesArray = ["关羽","张飞","赵云","马超","黄忠"]
var scoresArray = [Double](count: namesArray.count, repeatedValue: 0.0)

for (i,name) in namesArray.enumerate() {
    print("请输入\(name)的成绩:", terminator: "")
    scoresArray[i] = inputDouble()
}

var sum = scoresArray[0]
var maxIndex = 0
var max = scoresArray[0]
var minIndex = 0
var min = scoresArray[0]
for (index,score) in scoresArray[1.. max {
        max = score
        maxIndex = index + 1
    }
    else if score < min {
        min = score
        minIndex = index + 1
    }
}
print("平均分:\(sum / Double(scoresArray.count))")
print("\(namesArray[maxIndex])得到了最高分:\(max)")
print("\(namesArray[minIndex])得到了最低分:\(min)")

关于编写好的代码的感想

1.勤加练习,要抓住每一次锻炼的机会!
  2.勤加研究,对于代码的每一个细节、思路都要研究透彻!
  3.平时多玩些智力题,逻辑推理题,写代码其实很多时候都是在玩逻辑推理,如果怎样,否则怎样,类似于这种选择问题!
  4.交流可以碰撞出火花,通过交流你会发现原来有些问题可以这样思考,而不是那样思考!
  5.编程无处不在,处处皆编程,要真正喜欢上它,别觉得它是负担和累赘!

** 第一次编写这种文档,看完后打赏一下哦!**
谢谢!!!

你可能感兴趣的:(对于Swift的初步了解)