我与swift的第一个约会

我对swift的第一印象

print("Hello,World!")

众所周知,每个程序员每接触新的一门语言,必将最先学会这一句经典:Hello,World! 世界上的第一个程序就是Hello World,由Brian Kernighan创作。。这个例程在Brian Kernighan 和Dennis M. Ritchie合著的《The C Programme Language》使用而广泛流行。swift当然也是如此的亲切,让我花了2秒的时间就与她有了交集。

f323dc4b02b10295fcea750724728ff4.jpg
一见钟情

Swift不需要引入头文件或写在main()内,也不需要在每一句加上分号(当然,若你保有使用某些其他语言的习惯,如Java、C等 加上分号结尾亦不会报错)。
Swift强大的类型推断
推断类型使代码更干净,不易犯错误,而模块消除了头,并提供命名空间。内存自动管理,而你甚至都不需要输入分号。

var myVariable = 42
myVariable = 50
let myConstant = 42

上面的myVariable会被swift推断为Int类型。
总的来说,在刚接触这门陌生的语言的时候,她的各种优点吸引了我,让我对学习这门语言有了很浓厚的兴趣。


swift对我的第一印象

愚蠢,呆萌,反应迟钝

当然,作为一个业余的初学者程序员,程序的道路并不是一帆风顺的,而耐心是我唯一的资产。每当遇到错误的时候,只有把程序一个一个的小红叉都pass掉,才能让程序正常运行,就像你必须给一个对象买到她想要的东西,她才回对你做出你想要的事(别yy)
swift好在你还去给她买东西的时候,只是选好了还没付钱,她就告诉你有些是错的,她不想要,这时你还可以换些别的,这就是swift的严密语法和强大的类型推断。只要你有耐心,细心一点,一定会运行出理想的功能。


约会后的短时间相处

The First Week

鱼儿已上钩,二话不说,直接进入主题:
渐渐的,模拟器成了我和swift的桥梁,每个程序的结果,都直观的在模拟器上体现出来:

牛眼睛.png

首先声明,这不是肾6,这是像我这种穷屌一样的开发者的福音:simulator(模拟器),每个app的运行都通过这个来实现。

第一周摸爬滚打
经过第一周的特别练习,让我们从初学者的角度轻松的完成了简易的app,由浅入深,了解了swift的一些基本语句结构,以及Xcode工具中控件的应用以及整体布局,视图美化等.
1.通过做牛眼睛游戏的过程,学会了点击按钮触发警告框提示结果:

let alertcontroller = UIAlertController(title: "警告", message: "系统温度过高", preferredStyle: .Alert)
let okAction = UIAlertAction(title: "ok", style: .Default, handler: nil)
alertcontroller.addAction(okAction)
self.presentViewController(alertcontroller, animated: true, completion: nil)

2.生成1-100的随机数

 number = Int(arc4random_uniform(100)) + 1

3.字符串插值 在字符串中插入一个变量或者常量的值(var)

 
print("\(a) + \(b) = \(a + b)")
print("\(a) - \(b) = \(a - b)")
print("\(a) * \(b) = \(a * b)")
print("\(a) / \(b) = \(a / b)")
print("\(a) % \(b) = \(a % b)")
// Swift中加减乘除运算的左右两边类型必须一致

4......

The Second Week

第二周细嚼慢咽
开始了正式了解swift这门语言的漫漫长路,从swift的基本属性到结构特征,由浅入深,层层逼近。
常量,变量,基本类型,函数,元组,循环结构,数组...一看就是很专业的样子,果断津津有味的学习起来。变量常量不多说,以后的程序中都会用到,非常重要。值得提的是,swift里面,阿猫阿狗都可以作为一个变量,let cat = "🐱"; print(cat)!是没有任何问题的。
标示符
命名规则

  • 字母(Unicode字符)、数字、下划线,数字不能开头
  • 大小写敏感
  • 不能使用关键字做标识符
  • 驼峰标识 - 第一个单词全小写以后每个单词首字母大写
  • 见名知意

基本类型
正常情况下,整数首选Int,小数首选Double,表示字符串首选String 表示真假用Bool类型

var b:Int8 = -128
print(Int.max)  //2^63-1
print(Int.min)  //-2^63
print(Int8.max) // 2^7-1
print(Int8.min)  //-2^7
print(Int16.max)//2^15-1
print(INT16_MAX)//-2^15
print(Int32.max)//2^31-1
print(Int32.min) //-2^31
var e : UInt8 = 255  //无符号 整形,只能是正整数
print(UInt8.max)
print(UInt8.min)
var f:Float = 1.235444
var g:Double = 1232.0

数据的输入
利用c 语言,可以进行数据的输入

  • 新建一个C file ,创建桥接头文件,在input.c 中定义变量:
屏幕快照 2016-08-06 下午2.46.24.png
  • 在input.h 文件中声明变量:
屏幕快照 2016-08-06 下午2.46.34.png
  • 在桥接头文件中,导入函数定义文件:
屏幕快照 2016-08-06 下午2.46.41.png
  • 在main.swift中调用输入函数,即可对控制台输入的变量进行运算操作:
print("a = ", terminator: "")
let a = inputInt()
print("b = ", terminator: "")
let b = inputInt()

**元组(tuple) **

  • 用一个变量或者一个常量保存多项数据信息的类型
let stu: (id: Int, name: String, gender: Bool, age: Int) = (1001, "王大锤", true, 23)
print(stu.0)
print(stu.1)
print(stu.2)
print(stu.3)
print(stu.name)
print(stu.age)
let (j, _, _, k) = stu
print("j = \(j)")
print("k = \(k)")

元组还有个非常强大的功能,交换数据,简单粗暴:

// 用元组交换两个变量的值
(x, y) = (y, x)

三元运算符
三元条件运算的?前面一定要加空格!!!

let msg = username == "admin" && password == "123456" ? "登录成功!!!" : "非法用户!!!"

顺便一提,在做应用的时候,一定要考虑到用户的体验效果 。比如,应用的运行速度,UI外表等等,一个小小的改变,可能就会让用户对你的应用感兴趣,比如,在登陆页面,键盘的控制就显得交互感十足了,如果点击屏幕任何位置,键盘就会自动隐藏:

 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        // 触摸屏幕任意位置隐藏虚拟键盘
        if usernameField.isFirstResponder() {
            usernameField.resignFirstResponder()
        }
        else if passwordField.isFirstResponder() {
            passwordField.resignFirstResponder()
        }
   }

循环结构
循环结构很容易崩溃,所以需要必要的断点调试。调试(debug) - 在怀疑出问题的代码处设置断点,程序会执行到断点处停下来 然后使用单步执行并观察,程序中所有的变量常量等的值来找到出问题的代码。
循环结构有三种:

  • for循环
for _ in 1..<10 {
    print("Hello, world!")
}
  • repeat-while循环 - 至少执行一次
var i = 1
repeat {
   print("\(i). Hello, world!")
    i += 1
} while i <= 100
  • while循环 - 有可能一次都不执行
var i = 1
while i <= 10 {
    print("\(i). Hello, world!")
    i += 1
}

利用这三种循环语句,适当的搭配分支语句,就可以解决一些实际问题了

  • 猜数字游戏
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

游戏截图


屏幕快照 2016-08-06 下午3.36.08.png
  • 求阶乘
print("n = ", terminator: "")
let n = inputInt()
var val = 1.0
var i = 2
while i <= n {
    val *= Double(i)
    i += 1
}
print("\(n)! = \(val)")
  • Craps赌博游戏
    两个骰子,玩家摇,第一次摇出7,11点,玩家胜,第一次摇出了2,3,12点庄家胜,如果摇到其他的,玩家继续第二轮摇,如果第二轮摇到7,庄家胜,如果摇到的数和第一轮相同,玩家胜,摇到其他的,玩家继续重复摇。。。
        func roll()->Int{
            return Int(arc4random_uniform(6))+1
            
        }
        var money  = 1000

        repeat{
        print("your money is \(money)")
            var debt:Int
        repeat{
            print("please make a bet:")
           debt = inputInt()
            }
            while debt<=0||debt>money
            
         var firstnum = roll()+roll()
            var isneedsgoon = true
            print("first number is \(firstnum)")
        switch firstnum {
        case 7,11:
            print("you win")
            money+=debt
            isneedsgoon = false
        case 2,3,12:
            print("you lose")
            money-=debt
            isneedsgoon = false
        default :
            isneedsgoon = true
        
        }
        while isneedsgoon{
             var currentnum = roll()+roll()
           print("next,you roll a \(currentnum)")
            if currentnum == 7{
                print("you lose")
                money -= debt
                isneedsgoon = false
            }
            else if currentnum == firstnum{
                print("you win")
                money += debt
                isneedsgoon = false
            }
        }
        }
        while money > 0
        print("your money is not enough")
  • 百钱百鸡
    典型的利用循环语句来穷举法,非常的实用:
    一百块钱,要买100只鸡,公鸡5元一只,母鸡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):(\(x),\(y),\(z))")
                }
            }
        }

结果:
(x,y,z):(0,25,75)
(x,y,z):(4,18,78)
(x,y,z):(8,11,81)
(x,y,z):(12,4,84)

  • 利用循环语句打印图案
var row = 5
for _ in 1...5{
    for i in 1...5{
        print("😝",terminator:"")
    }
    print(" ")
}
print("")
屏幕快照 2016-08-06 下午3.56.56.png
for i in 1...5{
    for j in 1...i{
        print("😡",terminator:"")
    }
    print("")
}
for m in 1...5{
    for n in 0...5-m{
        print("😂",terminator:"")
 
    }
    print("")

}
屏幕快照 2016-08-06 下午3.58.26.png
let hang = 7
for i in 0..<hang{
    var starnum:Int
    var spacenum:Int
        if  i <= hang/2 {
            starnum = i*2+1
       
        }
        else {
             starnum = (hang-i)*2-1
               }
    spacenum = row - starnum/2
    for l in 0..<spacenum{
        print("  ",terminator:"")
    }
    for l in 0..<starnum{
         print("😎",terminator:"")
    }
    print("")
}
屏幕快照 2016-08-06 下午3.59.24.png

数组
同一类型的数据的集合,可以是int ,string,double,bool....

  • 创建数组
var array1 = [String]()
var array2: [String] = []
var array3 = ["apple", "grape", "banana", "apple", "orange"]
var array4 = [String](count: 100, repeatedValue: "")
array3[2...4] = ["eggplant", "cucumber"]
for (index, value) in array3.enumerate() {
    print("\(index). \(value)")
}
  • 向数组中添加元素
array1 += ["strawberry"]
array1.append("pear")
array1.insert("waxberry", atIndex: 0)
array1.insert("watermelon", atIndex: 2)
array1.insert("lemon", atIndex: array1.count)
  • 数组的+运算
let array7 = array1 + array3//前提是两数组的类型相同
  • 从数组中删除元素
array1.removeAtIndex(2)//删除第三个元素
array1.removeFirst()//删除第一个元素
array1.removeAll()//删除所有元素
  • 数组的复制
var array5 = array3  //全部复制
array5[0] = "pitaya" //复制第一项
var array6 = array3[1...3]  //复制第2.3.4个元素 
  • 获取数组元素个数
print(array1.count)
  • 对数组中的元素进行遍历
for index in 0..<array3.count {
    // []是对数组进行下标运算(取出指定位置的元素)
    print(array3[index])
    if index == 1 {
        array3[index] = "litch"
    }
}
  • 数组的应用:
    1.简单排序
var index = 0
print("排序前:")
var array = [87,55,26,33,47]
print(array)
for p in 0..<array.count {
    var maxindex = p
    for a in p+1..<array.count{
        if array[a]>array[maxindex]{
            maxindex = a
        }
    }
    (array[p],array[maxindex]) = (array[maxindex],array[p])
}
print("排序后:")
print(array)

2.冒泡排序
设第一个数最大,将最大的数一次与数组中的数比较,如果还有比最大数大的,就交换位置,依次循环。

var mpArray = [60,70,65,12,91,33]
print("排序前:")
print(mpArray)
var iswhat = false
for i in 0..<mpArray.count-1{
    for j in 0..<mpArray.count-i-1{
        if mpArray[j]>mpArray[j+1]{
            (mpArray[j],mpArray[j+1]) = (mpArray[j+1],mpArray[j])
            iswhat = true
        }
        }
    if iswhat == false {
        break
    }
    }
print("排序后:")
print(mpArray)
屏幕快照 2016-08-06 下午4.21.12.png

说在后面的情话

经过接近半个月的接触,不断的触碰这门语言,已经对这门语言有种无法自拔的感觉,只想继续学下去,天,我是爱上她了吗?

成长记录册
  • 前两周


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

推荐阅读更多精彩内容