Day#02 Swift 101

前言

就小女子浅见,现在iOS开发有几个选项:

  • React Native
  • Flutter
  • Swift
  • Objective-C

React Native & Flutter

前者的话,我目前没有web app可以apapt成mobile app,而且根据个人经验,写前端的经验从来都不是很顺利XD。
2017被Google released的Flutter似乎是越来越主流的选择,不过也因为很新的关系,我担心线上资源较少。

Swift vs. Obj-C

根据OBJECTIVE C VS SWIFT COMPARISON这部影片,swift最主要的好处就是语法比较轻量、直观,虽然自己是学c/cpp出身的,或是说,就是因为是学c/cpp出身的XD所以最後选择学习Swiftヽ(‘ ∇‘ )ノ~~

Get Started with a playground

Variable & Collection

var - changable 宣告可改变值的变数
let - constant 宣告常数

Variable

let str: String = "Hello"

basic variable type: String, Double, Float, Boolean

Array

var integers = [Int] ()

常见方法: append(+=), 使用index取值, count

Set

by白话的数学定义,就是一堆没有编号、没有重复的资料

var chars = Set<Character>()

常见方法: insert

Dictionary

var dict = [Int: String] ()
dict[2] = ["aaaa", "cccc"]

print(dict[2]?[1]) // Optional("cccc")

第4行印出的Optional就是变数值可以为nil

Optional?

更精准的说,optional有两个值: nil, some

像是以下的程序码会出现error,因为无法确保str有值,也就是说只有string可以append string

var str: String?

var newStr = str + "suffix"

因此可以加上!去强制取值,不过记得还是要先判断是否真的有值可拿 :arrow_down_small:

if str != nil {
    var newStr = str! + "suffix"
}

换个写法,也可以直接使用一个常数变数去接,接得到的话就代表有值.
这边使用strVal接住str的值,并使用if去判断strVal是否有接到值,若有的话才进行append :arrow_down_small:

if let strVal = str {
    var newStr = strVal + "suffix"
}

...

在新版的swift当中,这种if let的写法又有了新的改革(!) (~ ̄▽ ̄)~\
我们可以使用guard来取代if let,我自己的理解有点像是确保的语意,颇析一下的话,其实也是一个if/else的结构。

func printMeaningOfLife() {
    guard let name = getMeaningOfLife() else {
        return
    }

    print(name)
}

(以上的例子出自於这篇文章: When to use guard let rather than if let)

Objects

Class

以下是一个简单的class范例,包含属性与方法

class FastCar {
    var topSpeed: Int
    
    init (topSpeed: Int) {
        self.topSpeed = topSpeed
    }
    func getTopSpeed () -> Int {
        return self.topSpeed
    }
}

Inheritance

以下是class继承的简单范例,BigFamilyCar继承FamilyCar、而FamilyCar又继承Car。因此BigFamilyCar共有3个属性,其中两个是继承来的。

class Car {
    let numWheels: Int
    
    init(numberWheels: Int) {
        self.numWheels = numberWheels
    }
}

class FamilyCar : Car { // numWheels, numDoors
    let numDoors = 5
}

class BigFamilyCar : FamilyCar { // numWheels, numDoors, size
    var size = "large"
}

结语

这篇文章就到这边了~虽然内容极其简单,但基於前一篇标题的精神,还是决定先打好微小的基础!

若有任何建议或是指教,欢迎留言◦°˚(*❛‿❛)/˚°◦

参考资源

Swift的问号与惊叹号:可有可无的 Optional


<<:  Day 2 弄好环境,跑一个范例服务器

>>:  Day2 # Hello World

Day 18 - DoS 攻击

Denial of service (DoS) 攻击 透过发送大量且不合法的请求到网路服务器,因为服...

[Angular] Day6. Sharing data between child and parent directives and components

我们了解到 Angular app 是由无数个大大小小的 Component 所组成的,所以就会常常...

Day10 - [丰收款] 安全无虞後,开始建立订单:ATM虚拟帐号篇 (2)

目前的情境是,我们的顾客已在电商平台把商品放入购物车,而且最後在失心疯加上手滑的情境下,决定要购买,...

Day-25 说明一下 Rails 的 MVC 架构是什麽?优点是?

我写的 Rails 的 R+MVC 笔记图 左上角的那个人是使用者,当使用者输入网址连上网址进入网...

Day23 - 使用Django-allauth整合社群登入

今天的实作内容主要根据网路资源进行。 Django并没有提供官方的社群登入整合模组,在第三方套件上,...