国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Swift語言基礎(chǔ)

這篇具有很好參考價值的文章主要介紹了Swift語言基礎(chǔ)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

swift簡介

Swift 是一種支持多編程范式和編譯式的開源編程語言,蘋果于2014年WWDC(蘋果開發(fā)者大會)發(fā)布,用于開發(fā) iOS,OS X 和 watchOS 應(yīng)用程序。

Swift 結(jié)合了 C 和 Objective-C 的優(yōu)點并且不受 C 兼容性的限制。

Swift 在 Mac OS 和 iOS 平臺可以和 Object-C 使用相同的運行環(huán)境。

官方手冊:
swift官方手冊
swift中文手冊(5.0)

開發(fā)配置:xcode(開發(fā)工具),playground(編程環(huán)境)

xcode項目文件

launchscreen.storyboard:視圖文件(一般是在app剛加載的時候一瞬間的閃現(xiàn)視圖)

viewcontroller.swift:代碼文件

info.plist:系統(tǒng)設(shè)置文件

main.stotyboard:視圖文件

語法

變量與常量

注釋:

// 單行注釋

/*
多行注釋
*/

變量定義

var age = 18

常量定義

let age = 19

常見數(shù)據(jù)類型

類型 關(guān)鍵字
整形 Int
浮點型 Double
布爾型 Bool
字符串型 String

類型安全

值推斷

// 自動推斷為整形
let age = 13
var age = 19

類型聲明

let age:Int = 13
var high:Double = 1.2
var name:String = "swift"
var t:Bool = false

強制類型轉(zhuǎn)換

var m:Double = 1.5
var n:Int = (Int)m + 1

運算符

和:&&
非:!
或:||

控制結(jié)構(gòu)

if語句

var p = 1
if p > 1 {
	print(1)
}
else if p < 1 {
	print(0)
}
else {
	print(2)
}

switch語句

var p = 1
switch p {
	case 0:
		print(0)
	case 1:
		print(1)
	case 2:
		print(2)
	default:
		print(false)
}

其他寫法

var m = "o"
switch m {
	case "a", "e", "i", "u", "e":
		print(true)
	default:
		print(false)
}

var n = 34
switch n {
	case 0...100:	// 包括100
		print(true)
	case 101..< 200:	// 不包括200
		print(false)
	default:
		print("none")
}

var p = 12
switch p {
	case Int.min...13:
		print(true)
	default:
		print(false)
}

循環(huán)結(jié)構(gòu)

for in

var arr:[Int] = [1, 2, 3]
for f in arr {
	print(f)
}

while

var i = 0
while i < 10 {
	print(i)
	i += 1	
}

數(shù)組

創(chuàng)建一個數(shù)組

// 1
var arr = [Int]()
// 2
var arr:[Int] = [1, 3, 4]
// 3
var arr = [Int](repeating: 10, count: 2)

修改數(shù)組

// 添加元素
var arr = [Int]()
arr.append(2)
arr.append(3)
arr += [4]
// 合并數(shù)組
var ar1 = [Int](repeating: 1, count: 3)
var ar2 = [Int](repeating: 2, count: 10)
var ar3 = ar1 + ar2

字典

創(chuàng)建字典

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

修改字典

// 添加或更新元素
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict.updateValue("One 新的值", forKey: 1)

// 移除元素
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
// 1
var removedValue = someDict.removeValue(forKey: 2)
// 2
someDict[2] = nil

遍歷字典

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

for (key, value) in someDict {
   print("字典 key \(key) -  字典 value \(value)")
}

字典轉(zhuǎn)換成數(shù)組

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

let dictKeys = [Int](someDict.keys)
let dictValues = [String](someDict.values)

還有count判斷鍵值對個數(shù),isEmpty()判斷是否為空

函數(shù)

func funcname(形參) -> returntype
{
   Statement1
   Statement2
   ……
   Statement N
   return parameters
}

函數(shù)調(diào)用

func runoob(site: String) -> String {
    return (site)
}
print(runoob(site: "www.runoob.com"))

返回值類型

// 元組
func minMax(array: [Int]) -> (min: Int, max: Int)? {
    if array.isEmpty { return nil }
    var currentMin = array[0]
    var currentMax = array[0]
    for value in array[1..<array.count] {
        if value < currentMin {
            currentMin = value
        } else if value > currentMax {
            currentMax = value
        }
    }
    return (currentMin, currentMax)
}
if let bounds = minMax(array: [8, -6, 2, 109, 3, 71]) {
    print("最小值為 \(bounds.min),最大值為 \(bounds.max)")
}

// 無返回值
func runoob(site: String) {
    print("菜鳥教程官網(wǎng):\(site)")
}
runoob(site: "http://www.runoob.com")

參數(shù)范圍

// 局部函數(shù)參數(shù),number 為局部參數(shù)名,只能在函數(shù)體內(nèi)使用
func sample(number: Int) {
    print(number)
}
sample(number: 1)
sample(number: 2)
sample(number: 3)

// 外部函數(shù)參數(shù)名,在局部參數(shù)名前指定外部參數(shù)名,中間以空格分隔,外部參數(shù)名用于在函數(shù)調(diào)用時傳遞給函數(shù)的參數(shù)
func pow(firstArg a: Int, secondArg b: Int) -> Int {
   var res = a
   for _ in 1..<b {
      res = res * a
   }
   print(res)
   return res
}
pow(firstArg:5, secondArg:3)

inout傳遞和地址傳遞

一般默認在函數(shù)中定義的參數(shù)都是常量參數(shù),也就是這個參數(shù)你只可以查詢使用,不能改變它的值。

如果想要聲明一個變量參數(shù),可以在參數(shù)定義前加 inout 關(guān)鍵字,這樣就可以改變這個參數(shù)的值了

func  getName(_ name: inout String).........

一般默認的參數(shù)傳遞都是傳值調(diào)用的,而不是傳引用。所以傳入的參數(shù)在函數(shù)內(nèi)改變,并不影響原來的那個參數(shù)。傳入的只是這個參數(shù)的副本。

當(dāng)傳入的參數(shù)作為輸入輸出參數(shù)時,需要在參數(shù)名前加 & 符,表示這個值可以被函數(shù)修改

func swapTwoInts(_ a: inout Int, _ b: inout Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

var x = 1
var y = 5
swapTwoInts(&x, &y)
print("x 現(xiàn)在的值 \(x), y 現(xiàn)在的值 \(y)")

函數(shù)類型

在 Swift 中,使用函數(shù)類型就像使用其他類型一樣。例如,你可以定義一個類型為函數(shù)的常量或變量,并將適當(dāng)?shù)暮瘮?shù)賦值給它

var addition: (Int, Int) -> Int = sum

函數(shù)嵌套

func calcDecrement(forDecrement total: Int) -> () -> Int {
   var overallDecrement = 0
   func decrementer() -> Int {
      overallDecrement -= total
      return overallDecrement
   }
   return decrementer
}
let decrem = calcDecrement(forDecrement: 30)
print(decrem())

結(jié)構(gòu)體和枚舉

在此不做敘述

閉包

類和對象

計算屬性

除存儲屬性外,類、結(jié)構(gòu)體和枚舉可以定義計算屬性,計算屬性不直接存儲值,而是提供一個 getter 來獲取值,一個可選的 setter 來間接設(shè)置其他屬性或變量的值

class sample {
    var no1 = 0.0, no2 = 0.0
    var length = 300.0, breadth = 150.0
    
    var middle: (Double, Double) {
        get{
            return (length / 2, breadth / 2)
        }
        set(axis){
            no1 = axis.0 - (length / 2)
            no2 = axis.1 - (breadth / 2)
        }
    }
}
var result = sample()
print(result.middle)
result.middle = (0.0, 10.0)

print(result.no1)
print(result.no2)

如果計算屬性的 setter 沒有定義表示新值的參數(shù)名,則可以使用默認名稱 newValue

只讀計算屬性
只有 getter 沒有 setter 的計算屬性就是只讀計算屬性。

只讀計算屬性總是返回一個值,可以通過點(.)運算符訪問,但不能設(shè)置新的值。

class film {
    var head = ""
    var duration = 0.0
    var metaInfo: [String:String] {
        return [
            "head": self.head,
            "duration":"\(self.duration)"
        ]
    }
}

var movie = film()
movie.head = "Swift 屬性"
movie.duration = 3.09

print(movie.metaInfo["head"]!)
print(movie.metaInfo["duration"]!)

全局變量(static關(guān)鍵字)

struct Structname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 這里返回一個 Int 值
   }
}

enum Enumname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 這里返回一個 Int 值
   }
}

class Classname {
   class var computedTypeProperty: Int {
      // 這里返回一個 Int 值
   }
}

屬性觀察器

可以為屬性添加如下的一個或全部觀察器:

  • willSet在設(shè)置新的值之前調(diào)用
  • didSet在新的值被設(shè)置之后立即調(diào)用
  • willSet和didSet觀察器在屬性初始化過程中不會被調(diào)用
class Samplepgm {
    var counter: Int = 0{
        willSet(newTotal){
            print("計數(shù)器: \(newTotal)")
        }
        didSet{
            if counter > oldValue {
                print("新增數(shù) \(counter - oldValue)")
            }
        }
    }
}
let NewCounter = Samplepgm()
NewCounter.counter = 100
NewCounter.counter = 800

注意:
不需要為無法重載的計算屬性添加屬性觀察器,因為可以通過 setter 直接監(jiān)控和響應(yīng)值的變化。

構(gòu)造器和析構(gòu)器

// 構(gòu)造器
init() {
	// do something
}
// 析構(gòu)器
deinit() {
	// do something
}

繼承

class a {
	// do something
}
class b: a {
	// do something
}

重寫
子類可以通過繼承來的實例方法,類方法,實例屬性,或下標(biāo)腳本來實現(xiàn)自己的定制功能,我們把這種行為叫重寫(overriding)

通過使用super前綴來訪問超類的方法,屬性或下標(biāo)腳本。

重寫 訪問方法,屬性,下標(biāo)腳本
方法 super.somemethod()
屬性 super.someProperty()
下標(biāo)腳本 super[someIndex]
class SuperClass {
    func show() {
        print("這是超類 SuperClass")
    }
}

class SubClass: SuperClass  {
    override func show() {
        print("這是子類 SubClass")
    }
}

let superClass = SuperClass()
superClass.show()

let subClass = SubClass()
subClass.show()

swift協(xié)議

協(xié)議規(guī)定了用來實現(xiàn)某一特定功能所必需的方法和屬性。

任意能夠滿足協(xié)議要求的類型被稱為遵循(conform)這個協(xié)議。

類,結(jié)構(gòu)體或枚舉類型都可以遵循協(xié)議,并提供具體實現(xiàn)來完成協(xié)議定義的方法和功能。

協(xié)議定義

protocol SomeProtocol {
    // 協(xié)議內(nèi)容
}

遵循協(xié)議

struct SomeStructure: FirstProtocol, AnotherProtocol {
    // 結(jié)構(gòu)體內(nèi)容
}
class SomeClass: SomeSuperClass, FirstProtocol, AnotherProtocol {
    // 類的內(nèi)容
}

對屬性的規(guī)定

protocol classa {
    
    var marks: Int { get set }
    var result: Bool { get }
    
    func attendance() -> String
    func markssecured() -> String
    
}

protocol classb: classa {
    
    var present: Bool { get set }
    var subject: String { get set }
    var stname: String { get set }
    
}

class classc: classb {
    var marks = 96
    let result = true
    var present = false
    var subject = "Swift 協(xié)議"
    var stname = "Protocols"
    
    func attendance() -> String {
        return "The \(stname) has secured 99% attendance"
    }
    
    func markssecured() -> String {
        return "\(stname) has scored \(marks)"
    }
}

let studdet = classc()
studdet.stname = "Swift"
studdet.marks = 98
studdet.markssecured()

print(studdet.marks)
print(studdet.result)
print(studdet.present)
print(studdet.subject)
print(studdet.stname)

不做過多敘述,詳情可見swift協(xié)議規(guī)范

swift拓展

擴展就是向一個已有的類、結(jié)構(gòu)體或枚舉類型添加新功能。

擴展可以對一個類型添加新的功能,但是不能重寫已有的功能。

Swift 中的擴展可以:

  • 添加計算型屬性和計算型靜態(tài)屬性
  • 定義實例方法和類型方法
  • 提供新的構(gòu)造器
  • 定義下標(biāo)
  • 定義和使用新的嵌套類型
  • 使一個已有類型符合某個協(xié)議
extension SomeType {
    // 加到SomeType的新功能寫到這里
}

詳情可見swift拓展文章來源地址http://www.zghlxwxcb.cn/news/detail-655252.html

到了這里,關(guān)于Swift語言基礎(chǔ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • iOS開發(fā)Swift-枚舉

    枚舉:一組相關(guān)的值定義了一個共同的類型,使你可以在代碼中以類型安全的方式來使用這些值。 原始值:定義枚舉時被預(yù)先填充的值。 (1)整數(shù)為原始值時,隱式賦值遞增1。未設(shè)置原始值時,默認為0,之后遞增1. (2)字符串為原始值,隱式賦值為枚舉成員的名稱。

    2024年02月11日
    瀏覽(28)
  • iOS開發(fā)Swift-函數(shù)

    ?(1)無參函數(shù) (2)多參函數(shù) (3)無返回值 (4)多重返回值 (5)可選元組返回類型(元組可以是nil) (6)隱式返回的函數(shù) 任一可以被寫成一行return的函數(shù),return(x) + for。 調(diào)用的時候: 方法名(for: 參數(shù)) (1)指定參數(shù)標(biāo)簽 (2)忽略參數(shù)標(biāo)簽 (3)默認參數(shù)值 (4)可變參數(shù) 一個可變參數(shù)可接受0個或多

    2024年02月11日
    瀏覽(28)
  • iOS開發(fā)Swift-閉包

    將很長的閉包表達式作為最后一個參數(shù)傳遞給函數(shù),不用寫出他的參數(shù)標(biāo)簽。 嵌套函數(shù)可捕獲其外部函數(shù)所有參數(shù)、變量、常量。 當(dāng)一個閉包作為一個參數(shù)傳到一個函數(shù)中,但閉包在函數(shù)返回之后才被執(zhí)行,則稱閉包逃逸。 標(biāo)注@escaping,表示允許閉包逃逸。 ?包裝傳遞給函數(shù)

    2024年02月11日
    瀏覽(19)
  • IOS-生命周期-Swift

    IOS-生命周期-Swift

    App主要有五種狀態(tài),分別是: 未運行——Not running 應(yīng)用程序沒啟動 未激活——Inactive 程序在前臺運行,不過沒有接收到事件。 一般每當(dāng)應(yīng)用要從一個狀態(tài)切換到另一個不同的狀態(tài)時,中途過渡會短暫停留在此狀態(tài)。唯一在此狀態(tài)停留時間比較長的情況是:當(dāng)用戶鎖屏?xí)r,或

    2024年01月23日
    瀏覽(33)
  • iOS開發(fā)Swift-控制流

    (1)復(fù)合匹配 (2)區(qū)間匹配 (3)元組匹配 (4)值綁定匹配 (5)where continue, break, fallthrough, return, throw continue: 停止本次循環(huán),開始下次循環(huán) break: 立即結(jié)束整個控制流??梢允褂胋reak忽略switch的分支。 fallthrough貫穿: switch中的case加入貫穿,case會穿透到下一個case/ default。

    2024年02月11日
    瀏覽(22)
  • 【教程】iOS Swift應(yīng)用加固

    【教程】iOS Swift應(yīng)用加固

    ?? 保護您的iOS應(yīng)用免受惡意攻擊!在本篇博客中,我們將介紹如何使用HTTPCORE DES加密來加固您的應(yīng)用程序,并優(yōu)化其安全性。通過以下步驟,您可以確保您的應(yīng)用在運行過程中不會遭受數(shù)據(jù)泄露和未授權(quán)訪問的風(fēng)險。 本文將指導(dǎo)您如何通過改變編譯方式、處理靜態(tài)庫、解決

    2024年01月23日
    瀏覽(53)
  • iOS開發(fā)Swift-類型轉(zhuǎn)換

    1.Int或Double轉(zhuǎn)字符串 2.Double轉(zhuǎn)Int(去掉小數(shù)點后面的) 3.Int轉(zhuǎn)Double 4.向上轉(zhuǎn)型 5.向下轉(zhuǎn)型

    2024年02月09日
    瀏覽(21)
  • iOS開發(fā)Swift-集合類型

    集合基本類型:數(shù)組 Array (有序), 集合 Set (無序不重復(fù)), 字典 Dictionary (無序鍵值對) (1)數(shù)組的表示 (2)創(chuàng)建空數(shù)組 (3)帶值數(shù)組 (4)兩數(shù)組相加創(chuàng)建數(shù)組 (5)字面量創(chuàng)造數(shù)組 (6)訪問數(shù)組 (7)添加 (8)修改 (9)刪除 (10)遍歷 同時需要索引和值時: (1)集合的表示 (2)構(gòu)造一個集合 (3)字面

    2024年02月11日
    瀏覽(28)
  • iOS_Swift高階函數(shù)

    1.1 定義 高階函數(shù):higher-order function 如果一個函數(shù): 接受一個或多個函數(shù)當(dāng)作參數(shù) 把一個函數(shù)當(dāng)作返回值 那么這個函數(shù)就被稱做高階函數(shù)。 例如: 看著不像是函數(shù)作為參數(shù),是因為 Swift 尾隨閉包 Trailing Closure 的特性。 Swift 允許當(dāng)函數(shù)的最后一個參數(shù)是閉包時,可以以緊跟

    2024年02月04日
    瀏覽(18)
  • IOS-高德地圖路徑繪制-Swift

    IOS-高德地圖路徑繪制-Swift

    本文展示的是在IOS開發(fā)中調(diào)用高德地圖進行駕車路徑繪制,開發(fā)語言是Swift。 IOS高德地圖集成請看:IOS集成高德地圖Api 使用路徑規(guī)劃功能需要集成高德地圖的搜索功能。 定義主搜索對象 AMapSearchAPI ,并繼承搜索協(xié)議。 實現(xiàn)代理方法onRouteSearchDone arrowTexture是圖片資源文件,按

    2024年01月18日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包