欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:iOS 面試 Swift基礎(chǔ)題

柚子快報邀請碼778899分享:iOS 面試 Swift基礎(chǔ)題

http://yzkb.51969.com/

一、Swift 存儲屬性和計算屬性比較:

存儲型屬性:用于存儲一個常量或者變量 計算型屬性: 計算性屬性不直接存儲值,而是用 get / set 來取值 和 賦值,可以操作其他屬性的變化.

計算屬性可以用于類、結(jié)構(gòu)體和枚舉,存儲屬性只能用于類和結(jié)構(gòu)體。存儲屬性可以是變量存儲屬性(用關(guān)鍵字 var 定義),也可以是常量存儲屬性(用關(guān)鍵字let定義),而計算屬性只能用var定義計算屬性不直接存儲值,而是提供一個 getter 和一個可選的setter,來間接獲取和設(shè)置其他屬性或變量的值

var age = 12

var name = "小花"

var kind = "法斗"

//定義計算屬性的getter方法,該方法的返回值由age、name、kind三個存儲屬性決定

var petInfo:String{

get {

return "this is a pet which name is \(name),age is \(age), kind is \(kind)"

}

set (newInfo)

{

}

}

二、inout關(guān)鍵字有什么作用

需要用到inout 關(guān)鍵字,調(diào)用函數(shù)時加& inout關(guān)鍵字本質(zhì)是通過地址傳遞進(jìn)行值修改的

三、OC和Swift中的protocol

OC和SwiftProtocol的共同點

本質(zhì)都是抽取不同類的共同方法和屬性(聲明),供遵循協(xié)議的類或?qū)ο笫褂谩?都可以通過定義協(xié)議實例deleagate,來實現(xiàn)委托代理模式。 PS:類比繼承的概念,繼承父類的方式比較險隘,子類和父類只能為同一基類,且方法都有實現(xiàn),需在子類中override,并不能把方法和屬性完全獨立出來,且不能多繼承。

OC和SwiftProtocol的區(qū)別(核心)

OC中的協(xié)議更單純的受限于委托代理的含義,多用于跨類的傳值和回調(diào)通知。 而Swift是面向協(xié)議編程,其思想是通過抽取不同類中的相同方法和屬性,實現(xiàn)模塊化減少耦合。 Swift可以通過協(xié)議extension擴展,缺省實現(xiàn)協(xié)議的方法(OC不行)。 Swift的協(xié)議不需要單獨聲明協(xié)議對象(id delegate)和指定代理(delegate = self),只需要遵循協(xié)議的類實現(xiàn)聲明,或使用協(xié)議的缺省實現(xiàn)。

四、Swift 中的 enum 和 OC 中 有什么區(qū)別

OC 1.oc的枚舉值相當(dāng)于這個文件中的一個局部變量,只能是整型 2.不同枚舉中,枚舉名稱不可以一樣,在同一文件 Swift 3.枚舉里可以寫方法 4.枚舉的rawValue可以是Float(float也是賦值的后面依次+1)或是String,或是沒有 5.可以用Rank(rawValue: 3)方法創(chuàng)建一個枚舉實例 6.枚舉實例可以帶參數(shù)

五、struct和class的區(qū)別

1)swift中所有值類型:struct、enum使用直接派發(fā)。 2)swift中協(xié)議的extensions(類似于OC的分類)使用直接派發(fā),初始聲明函數(shù)使用函數(shù)表派發(fā) 3)swift中class中extensions使用直接派發(fā),初始化聲明函數(shù)使用函數(shù)表派發(fā),dynamic修飾的函數(shù)使用消息派發(fā)。

Swift中,mutating關(guān)鍵字指的是可變即可修改。用在structure和enumeration中,雖然結(jié)構(gòu)體和枚舉可以定義自己的方法,但是默認(rèn)情況下,實例方法中是不可以修改值類型的屬性。為了能夠在實例方法中修改屬性值,可以在方法定義前添加關(guān)鍵字mutating。 在 Swift 中,值類型,存放在棧區(qū);引用類型,存放在堆區(qū)。Swift 中,典型的有 struct,enum,以及 tuple 都是值類型。 當(dāng)值類型的變量作為參數(shù)被傳入函數(shù)時,相當(dāng)于創(chuàng)建了新的常量并初始化為傳入的變量值,該參數(shù)的作用域及生命周期僅存在于函數(shù)體內(nèi)。 當(dāng)引用類型的變量作為參數(shù)被傳入函數(shù)時,相當(dāng)于創(chuàng)建了新的常量并初始化為傳入的變量引用,當(dāng)函數(shù)體內(nèi)操作參數(shù)指向的數(shù)據(jù),函數(shù)體外也受到了影響 6.當(dāng)你的項目的代碼是 Swift 和 Objective-C 混合開發(fā)時,你會發(fā)現(xiàn)在 Objective-C 的代碼里無法調(diào)用 Swift 的 Struct。因為要在 Objective-C 里調(diào)用 Swift 代碼的話,對象需要繼承于 NSObject。 7.內(nèi)存分配:struct分配在棧中,class分配在堆中。struct比class更“輕量級”(struct是跑車跑得快,class是SUV可以載更多的人和貨物) 3.struct是值類型(Value Type),深拷貝。class是引用類型(Reference Type),淺拷貝。

六、Swift optional是什么類型的

optional類型是一個枚舉類型,有兩個枚舉值: 1、None類型 2、Some(Wrapped) 這兩個類型決定了optional類型的概念和含義,有值或者沒有值: 1)optional.None表示該類型沒有值,也就是nil。(特別聲明,swift中的nil不在有指針含義,而是表示且僅表示optional的.None)。 2)optional.Some(Wrapped)這是表示有值的情況,Some類似于java或者c++的泛類型的含義,Wrapped 類似是封裝的值。

optional的wrap和unwrap

使用optional類型,該類型會對賦值過程和取值進(jìn)行一些處理。 1)賦值也被稱為裝包的過程(wrap),optional類型會獲取當(dāng)前值的類型和具體值,如int類型的數(shù)字100.當(dāng)一個optional類型被賦值為這個值時,其實optional記錄了對應(yīng)的類型(some)int,和值部分(wrapped)100. 2)取值也被稱為解包的過程(unwrap),optional根據(jù)記錄的類型(some)如上面說的int,和值部分(wrapped)100,新建一個some(wrapped)同int(100)返回給程序 optional是swift特別聲明的安全類型,在使用過程中如果處理得當(dāng)?shù)脑捒梢苑乐挂郧皁c上很多因為數(shù)據(jù)沒值導(dǎo)致的crash。個人還是比較推薦使用的,雖然有時候有些解包的過程感覺特別麻煩,但這都是一道道安全門,阻斷了很多crash的誕生。

七、rxswift中請求重試的方法是哪個?

1,catchError

enum ObError: Error {

case error1

}

let ob1 = PublishSubject()

let ob2 = PublishSubject.of("A", "B")

ob1.catchError { (error) -> Observable in

print(error)

return ob2

}.subscribe { event in

print(event)

}.disposed(by: disposeBag)

ob1.onNext("111")

ob1.onError(ObError.error1)

//next(111)

//error1

//next(A)

//next(B)

//completed

2,retry

var isFail = true

let obs = Observable.create { (ob) -> Disposable in

ob.onNext("成功1")

if isFail {

ob.onError(ObError.error1)

isFail = false

}

ob.onNext("重試成功")

ob.onCompleted()

return Disposables.create()

}

obs.retry(2).subscribe { event in

print(event)

}.disposed(by: disposeBag)

next(成功1)

next(成功1)

next(重試成功)

completed

八、講解一下Swift中的數(shù)據(jù)封裝

封裝主要有兩大目的:一是為了我們使用數(shù)據(jù)更加方便,二是為了數(shù)據(jù)保護(hù)。 1、Swift 訪問修飾符 在 Swift 語言中,訪問修飾符也分為三類,分別是 private、internal、public。

Swift 的訪問修飾符從 Xcode6 beta4 才開始支持。 Swift 對訪問權(quán)限的控制,不是基于類的,而是基于文件的。 在 Swift 語言中,若要設(shè)置某一屬性的訪問權(quán)限,需在定義屬性時加上相應(yīng)的修飾前綴。 三類修飾符的訪問權(quán)限

1)private 所修飾的屬性或者方法只能在當(dāng)前 Swift 源文件里可以訪問,在別的文件里訪問會出錯。

2)internal 是默認(rèn)的訪問權(quán)限。所修飾的屬性或者方法在源代碼所在的整個模塊都可以訪問。如果是框架或者是庫代碼,則在整個框架內(nèi)部可以訪問,框架由外部代碼所引用時,則不可訪問。如果是 App 代碼,在整個 App 內(nèi)部可以訪問。

3)public 所修飾的屬性或者方法對于引用了該文件或者模塊的文件來講,都能訪問這些屬性和方法。一般來說 public 的出現(xiàn)是為了 API 開發(fā)而設(shè)置。

Class Person {

private var _weight: Int!

var weight: Int {

get {

return _weight

}

set {

_weight = newValue

}

}

}

您甚至可以將變量設(shè)為公開只讀,并設(shè)為私有讀寫:

class Person {

public private(set) var weight: Int

}

九、Swift異常捕捉的方法有哪些 ?

//

// ViewController.swift

// Throws

//

// Created by fe on 2017/3/7.

// Copyright ? 2017年 fe. All rights reserved.

//

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

//如果在調(diào)用系統(tǒng)的方法時,后面有throws則說明此方法會拋出異常,如果方法會拋出異常,則需要我們處理異常

//創(chuàng)建正則表達(dá)式規(guī)則

let pattern = "abcdefg"

//創(chuàng)建正則表達(dá)式隊形

/*

在swift中提供三種處理異常的方式

方式一:try方式 程序員手動捕捉異常

do { let regex = try NSRegularExpression(pattern: pattern, options:.caseInsensitive)

print(regex)

}catch{

print(error)

}

方式二:try?方式(常用方式) 系統(tǒng)幫助我們處理異常,如果有異常,則該方法返回nil,如果沒有異常,則該方法返回對應(yīng)的對象

guard (try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)) != nil else {

return

}

方式三:try!方式(不建議使用,非常危險)這種方法直接告訴系統(tǒng)沒有異常,如果有異常則程序會崩潰

let regex = try! NSRegularExpression(pattern: pattern, options:.caseInsensitive)

*/

}

}

函數(shù)中產(chǎn)生的異常只能在函數(shù)內(nèi)部解決,開發(fā)者也可以使用throws關(guān)鍵字將此函數(shù)聲明為可拋異常函數(shù),此類聲明則允許開發(fā)者在函數(shù)外解決函數(shù)內(nèi)部拋出的異常

** 異常的捕獲與處理

系統(tǒng)為我們提供了三種異常處理的方法:

<1> 使用do-catch結(jié)構(gòu)來捕獲處理異常、將異常映射為optional值,終止異常傳遞

<2> 使用try?來調(diào)用函數(shù)可以將異常映射為Optional值

<3> 使用try!來強制終止異常的傳遞

do-catch:do-catch結(jié)構(gòu)是swift語言中處理異常最常用的方法,開發(fā)者需要將可能拋出的異常的代碼放入do結(jié)構(gòu)中,如果這部分代碼中有拋出異常,則會從catch塊中尋找對應(yīng)的異常類型,如果找到對應(yīng)的,則會執(zhí)行此catch塊中的異常處理代碼.

十、map函數(shù)有幾種、分別講解一下?

高階函數(shù)一共有下面幾個:

map:對給定數(shù)組每一個元素,執(zhí)行閉包中的映射,將映射結(jié)果放置在數(shù)組中返回。 flatMap:對給定數(shù)組的每一個元素,執(zhí)行閉包中的映射,對映射結(jié)果進(jìn)行合并操做,而后將合并操做后的結(jié)果放置在數(shù)組中返回。 compactMap:對給定數(shù)組的每一個元素,執(zhí)行閉包中的映射,將非空的映射結(jié)果放置在數(shù)組中返回。 filter:對給定數(shù)組的每一個元素,執(zhí)行閉包中的操做,將符合條件的元素放在數(shù)組中返回。 reduce:對給定數(shù)組的每一個元素,執(zhí)行閉包中的操做對元素進(jìn)行合并,并將合并結(jié)果返回。

柚子快報邀請碼778899分享:iOS 面試 Swift基礎(chǔ)題

http://yzkb.51969.com/

文章來源

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18785488.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄