[Day 16] 从头开始-从入门到 Swift 语法梳理

开发必须的设备以及相关的设定

入门开发的几个必要条件:一台 Mac , 苹果帐号 ,以及一个一般人智商的大脑

( 起码是 512G以上的,128G的感觉只要一更新我里面的大部分资料就要清空才能

更新,蛮不方便的。 一个APP开发的素材,参考的程序码以及其他有的没的大概也

要多个 200g 才勉强够用,另外也要算到虚拟机的容量。当然外接个硬碟也是个选

择,只不过读写的速度就自然会比较慢一点就是了,这点也要考虑) 当有了 Mac 

之後,就直接注册苹果帐号, 然後去 Mac App Stroe 下载 X Code 即可,除

此之外,有实际手机以及 iPad 就更方便一点了。

我个人觉得学习 App 最佳的方法

虽然我目前在iOS开发的领域只能算个新手,我感觉我自己学得蛮慢的,我感觉最

有效的方式还是直接做,做中学真的比较有效,我的经验是这样,可能也因为我

比较不是那种一看就会的聪明人就是了,写程序有时候也是蛮靠经验的,知道甚

麽流程在什麽状况比较有效,知道一些 Google 不到的诀窍以及方法,一般的也

起码要会 Google,这些都是透过反覆的开发以及编写程序累积的经验,就类似肌

肉记忆或条件反射,然後再自己总结跟内化成一个能够让人听懂的方法或是流程。

有买书或找到学习影片的话,最起码手也要打一遍,然後用给出的范例程序码,改

出自己需要的功能。

业余或课外的时间假如想学的话,还是以某个产出 ( 比赛 , App, 教学文章或是

接的案子之类的)作为目的进行学习会比较有效果,要不然有时候会像我前几篇文章

一样流於形式,只求低空飞过,那抽出来努力做这件事的时间可能没那麽值得了。

语言大略: Swift

使用 Playground 测试 Swift:

https://ithelp.ithome.com.tw/upload/images/20211002/20092056EfNV6OaUAJ.png
https://ithelp.ithome.com.tw/upload/images/20211002/20092056anjONZlt5n.png
https://ithelp.ithome.com.tw/upload/images/20211002/20092056nTF8yGVvKc.png

常数,变数, 型别推论, 流程控制

let a = 10
var b = 0

let 即宣告常数,类似c中的 static 宣告,在宣告装入值之後即不能修改常数的

数值, var 即为一般的变数。

-类型标注

像是 var welcomeString: String,就是把变数型态设为 String,其他类似 Int,

Double以及bool也是可以设的。

-元组

宣告的方式类似 let Abt = ("GiGi hadid", 25, 1.79) ,简单来说就是一个可装入

不同型态值的复合值,可宣告成常数也可宣告成变数。

阵列,字典,可选型别

  • 阵列
    宣告一个存储 Int 类型的空阵列
var arr = [Int]()

or

var arr : [Int] = []
  • 字典

创建字典的方式如下,另外创建空字典的方式类似於阵列,在做类似 key, value

查找时使用很方便。

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

-可选型别

简单来说就是一个避免因nil值产生错误的状况,解包的方法之一就是先确定

值非空值(nil),另一方法就是把值装入常数中,类似if let a =c {do something; }

函数(Functions),闭包(Closures)

-函数(Functions)

func 函式名(参数: 参数类型) -> 返回值型别 {
内部执行的程序
return 要返回的值
}
类似下面这样

func sumInt(numbers: int...) -> int {
    var total: Int = 0
    for number in numbers {
        total += number
    }
    return total
}

-闭包(Closures)
总而言之可算是匿名的函数,结构大体如下

{ (参数) -> return 的参数以及型别 in
处理逻辑...
}
闭包的用法可以很多样,可以使用function当闭包,也可以自己宣告,间单来说,

呼叫闭包就是把该程序码的片段呼叫过来执行。

func testClosure(printString: String, tCretuenValue: (String) -> Void) {
    tCretuenValue(printString)
}
testClosure(printString: "Good Morning", tCretuenValue: {(str: String) in
    return print(str) 
    //输出 "Good Morning"
})

func g() -> Void {
     print(“Good Morning”)
}

func m(closure: () -> Void) {
     closure() // call 传入的 func
}

m(closure: g) // 输出 "Good Morning"

<<:  Day16-JDK堆栈跟踪工具:jstack(一)

>>:  Day 16. UX/UI 设计流程之四: Wireflow,并以 Axure RP 实作 (下)

python 奇偶数个数计算

QC+ 程序语言 Python 3 _ 408 奇偶数个数计算 说明: 请撰写一程序,让使用者输入十...

[Day 29] 会员登入及登出(一)

我们先做登入的画面, 在app/Http/Controllers/UserAuthControlle...

Day01 - 一切从试着了解开始

前言 话说,看了历年这麽多iThome铁人赛的文章,觉得这是一个相当好的活动,曾经从历年铁人大大们的...

以Postgresql为主,再聊聊资料库 PostgreSQL 多笔 update 方式探讨

PostgreSQL 多笔 update 方式探讨 前言 看到FB上 Backend 台湾 (Bac...

DAY30-总结

经历这几天的文章不知不觉也复习了30天的时间,期间也学习了不少基础知识,也更加了解一些更加熟练。 从...