Swift初学体验

学习总结

    学习了两周的Swift,第一周算是对Swift有了一个初步的认识,体会了Swift语言开发的过程以及可视化开发的便利,算是一个愉快的开始,第二周就是铺天盖地的循环,数组这些必须要掌握的语法,尤其是周三周四这两天的连绵不绝的练习,让我觉得在这里学习努力是不够的,要爆肝才行啊!不过,连着学了一周的语法,还是学到了一点东西的。

初识Swift

    作为一门发布了两年就能排在15名之前的语言,虽然有苹果火热的原因,但Swift必然也有它独特的魅力。作为一个初学者,我体会不到它怎样能成为20年内编程语言的霸主,不过既然这么多人追捧,就姑且认为它确实很牛逼。
    不过一句简单的打印"Hello,world!"的程序,却是还是感觉不错的,至少比起其他语言的一大串要好的多。Swift支持代码预览,这个革命性的特性可以允许程序员在不编译和运行应用程序的前提下运行 Swift 代码并实时查看结果,这对我们这些初学者来说是很友好的东西。在定义一个变量或常量的时候设置可以不需要考虑类型的问题,Swift强大的类型推断能力就能搞定这一切。

变量和常量

使用let来声明一个常量,使用var来声明一个变量

例如:

var a = 1
let b = 2
var a = b

变量和常量的值永远不会被隐式转换为其它类型,如果需要把一个值转换成其他类型,需要显示转换。

let label = "The width is"
let width = 94
let widthlabel = label + String(width)

还有一种把值转换为字符串的方法叫做 “字符串插值”

let day = 6
let today = "今天是星期\(day)"

元组(Tuples)

用一个变量或者一个常量保存多项数据信息的类型

let stu:(id:Int,name:String,gender:Bool,age:Int) = (1001,"王钢炮",true,21)
let (_,姓名,_,年龄) = stu
//元组取值从0开始,下划线表示忽略,取值时就可以跳过

用元组快捷交换两个变量的值

(x,y) = (y,x)

标识符的命名规则

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

运算符

1.算术运算符(Arithmetic Operators)

算术运算符主要有 + , - , * , / , % 五个,还有自增(++)和自减(--)两个在Swift3中即将删掉的运算符
算术运算符的要求就是左右两边的类型必须一样,不然无法运算,有趣的是,swift里还可以进行字符串的 + 运算。
关于整数的除运算,也有一点要注意;整数除以整数的商就是结果的整数部分,所以321除以100结果就是3,355除以100结果也等于3而不是4,没有四舍五入!

2.比较运算符(comparison Operators)

比较运算符又叫关系运算符,有 > , < , == , != , >= , <=六种,产生Bool类型的值,要么是true,要么是false!

let name = "world"
if name == "world" {
    print("hello, world")
} else {
    print("I'm sorry \(name), but I don't recognize you"
}

3.三元条件运算符(Ternary conditional Operator)

三元运算符的格式大概就是(question ? answer1 : answer2) 前面的question如果成立,就执行answer1,如果不成立,就执行answer2
有了三元运算符,就可以替代很多的if语句,可以让代码更简洁。

4.短路运算符(Logical Operator)

逻辑与(Logical And) &&
逻辑或(Loical Or) ||
逻辑非(Logical Not) !

let year = 1344
if ( year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0  {
    print("\(year)年是闰年")
}
else {
    print("\(year)年不是闰年")
}

分支结构

使用if和switch来进行条件操作,主要有
if{

}
else{

}
以及
switch{
case:
case:
default:
}
这两种结构都可以套用if-else里面可以套用switch-case,switch-case里也可以套用if-else的结构,当然if-else也能套用if-else。
比如:

// IT从业人员等级评定
print("请输入你的月薪: ", terminator: "")
let salary = inputInt()
if salary >= 0 {
    switch salary {
    case 0:
        print("你是一个无业游民")
    case 1...30000:
        print("你是一个小码畜")
    case 30001...60000:
        print("你是一个小码奴")
    case 60001...100000:
        print("你是一个大码农")
    case 100001...200000:
        print("你是一个光荣的IT民工")
    case 200001...500000:
        print("你是一个优秀的IT工程师")
    case 500001..<10000000:
        print("你是IT精英")
    case 10000000..<100000000:
        print("你是IT大哥, 我服")
    default:
        print("你是头上有光环的IT领袖, 求带")
    }
}
else {
    print("你丫有病!!!")
}

循环结构

    使用for_in、for、while、和repeat - while来进行循环。包裹条件和循环变量括号可以省略,语句的大括号还是必须的。
    repeat-while
 //repeat-while循环 - 至少执行一次
var i = 1
repeat {
    print("\(i). Hello, world!")
    i += 1
} while i <= 100

    while
 //while循环 - 有可能一次都不执行
var i = 1
while i <= 10 {
    print("\(i). Hello, world!")
    i += 1
}

    for - in
// for循环
for _ in 1..<10 {
   print("Hello, world!")
}

    在练习这一段的时候,差不多两天的时间不停的练习,确实让人爽了一把。智商余额不足的我每次看到其他人写出来而自己连思路都没有确实很揪心。但是在痛苦的过程中,确实还是学到了一些东西。
let answer = Int(arc4random_uniform(1000)) + 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("你的智商需要充值!")
    }

一个简单的猜数字的游戏用到了repeat-while,怎么用,放在哪里都可以让我琢磨许久。

// Craps赌博游戏

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("你破产了!!!")
    这个赌博游戏更是把这几天所学的知识全都用上了,代码的规范,函数的使用,循环,分支的结构全都涉及到了。
    除此之外,还get到了一个很重要的东西——穷举法:穷尽所有的可能性直到找到正确答案),这就是按照人的思维去算,但是人的运算速度有限,计算某些事情需要耗费太多时间而且容易出错。这里,用计算机使用穷举法就可以完美解决这个问题。计算机强就强在运算快,不易出错。
100钱买100鸡的问题
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)")
        }
    }
}

数组

数组主要是排序问题
swift 强大的功能使得这一问题变得非常简单,sort函数轻松解决

let newArray = array.sort(>)//排序后产生一个新数组
print(array)
print(newArray)
array.sortInPlace()//就在这个数组排序
print(array)

但是只会使用函数永远也不能进步,所以我们需要更复杂的方法来提升自己
除了用sort函数,我们还有两种方法可以排序

简单选择排序法

简单排序是定义(假设?)数组的第一个数为最小的数,依次与数组里的数进行比较,小的放前面,循环次数为数组里元素的个数

//简单选择排序

var array = ["faker","amazingj","condi","clearlove","martin","looper","swift","easyhoon",]
for i in 0..<array.count - 1{
var minIndex = i
for i in i+1..<array.count{
    if array[i] < array[minIndex]{
          minIndex = i
        
    }
}
(array[i],array[minIndex]) = (array[minIndex],array[i])
}
print(array)


冒泡排序法

冒泡排序:两两比较,前面的元素比后面的元素大就交换位置,再加上优化,排序完成就可以停止循环。适合只有少数顺序不对的数组。



var array = [56,37,68,23,99,27,6,77]
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 == false{
        break
    }
}
}
print(array)

经过一周的学习,我清楚的认识到我与其他同学尤其是与10k的差距,确实让人有点沮丧。不过没办法,既来之则安之,既然奔着学(shi)习(k)编(gao)程(xin)来的,就一定要搞定它!

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

推荐阅读更多精彩内容