中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      Swift筆試試題及其答案

      時間:2024-11-04 22:24:51 詩琳 筆試題目 我要投稿
      • 相關推薦

      Swift筆試試題及其答案

        在學習、工作中,我們需要用到試題的情況非常的多,借助試題可以更好地考查參試者所掌握的知識和技能。什么類型的試題才能有效幫助到我們呢?下面是小編收集整理的Swift筆試試題及其答案,僅供參考,大家一起來看看吧。

      Swift筆試試題及其答案

        Swift筆試試題及其答案 1

        問題1、(Swift 1.0及其之后的版本的問題)有什么更好的方法來寫下面的for循環?

        for var i = 0; i < 5; i++ {

        print("Hello!")

        }

        答案:

        for _ in 0...4 {

        print("Hello!")

        }

        Swift 實現了兩個數組運算符closed operator 和 half-operator.前者包含數組中得所有值。例如:下面的例子包含從0到4得所有整數

        0...4

        half-operator不包含數組中的最后一個元素,下面的例子會得到的結果和上面的一樣:

        0..<5

        問題2– Swift 1.0 or later

        思考下面的問題:

        struct Tutorial {

        var difficulty: Int = 1

        }

        var tutorial1 = Tutorial()

        var tutorial2 = tutorial1

        tutorial2.difficulty = 2

        tutorial1.difficulty 和 tutorial2.difficulty的值分別是多少?假如Tutorial是一個類,會有什么不同?并說明原因。

        答案:tutorial1.difficulty 的值是1,然而tutorial2.difficulty的值是2.

        在Swift中結構體是值類型,他們的值是復制的而不是引用的。下面的一行代碼意思是復制了tutorial1的值并把它賦值給tutorial2:

        var tutorial2 = tutorial1

        從這一行開始,tutorial2值得改變并不影響tutorial1的值。

        假如Tutorial是一個類,tutorial1.difficulty和tutorial2.difficulty的值將都會是2.在Swift中類對象都是引用類型。tutorial1屬性的任何改變將會反應到tutorial2上,反之亦然。

        問題3 – Swift 1.0 or later

        view1聲明成var類型,view2聲明let類型。這里有什么區別嗎?下面的最后一行代碼能編譯嗎?

        import UIKit

        var view1 = UIView()

        view1.alpha = 0.5

        let view2 = UIView()

        view2.alpha = 0.5 // Will this line compile?

        答案:view1是個變量可以重新賦值給一個新的實例化的UIView對象。使用let你只賦值一次,所以下面的代碼是不能編譯的:

        view2 = view1 // Error: view2 is immutable

        但是UIView是一個引用類型的類,所以你可以改變view2的屬性,也就是說最后一行代碼是可以編譯的:

        let view2 = UIView()

        view2.alpha = 0.5 // Yes!

        問題4 – Swift 1.0 or later

        下面的.代碼是把數組里面的名字按字母的順序排序,看上去比較復雜。盡最大的可能簡化閉包里的代碼。

        let animals = ["fish", "cat", "chicken", "dog"]

        let sortedAnimals = animals.sort { (one: String, two: String) -> Bool in

        return one < two

        }

        答案:

        第一個簡化的是參數。系統的參數類型推斷功能,可以計算出閉包里面參數的類型,所以你不必定義參數的類型:

        let sortedAnimals = animals.sort { (one, two) -> Bool in return one < two }

        函數返回值也可以被推斷出來,所以簡化掉,代碼變為:

        let sortedAnimals = animals.sort { (one, two) in return one < two }

        這個$i 符號可以代替參數名字,代碼進一步簡化為:

        let sortedAnimals = animals.sort { return $0 < $1 }

        在一個獨立的閉包內,return這個關鍵字是可以省略的。最后聲明的返回值就是閉包的返回值:

        let sortedAnimals = animals.sort { $0 < $1 }

        這簡化很多了,但是我們不能止步于此!

        對于字符串,有一個定義如下的比較函數:

        func Bool

        這個簡單的小函數可以使你的代碼簡潔如下:

        let sortedAnimals = animals.sort(<)

        注意每一步的編譯結果都相同,但是最后一步你的閉包里只有一個字符。

        問題5 – Swift 1.0 or later

        下面的代碼創建了兩個類Address和Person,并且創建了兩個實例對象分別代表Ray和Brain.

        class Address {

        var fullAddress: String

        var city: String

        init(fullAddress: String, city: String) {

        self.fullAddress = fullAddress

        self.city = city

        }

        }

        class Person {

        var name: String

        var address: Address

        init(name: String, address: Address) {

        self.name = name

        self.address = address

        }

        }

        var headquarters = Address(fullAddress: "123 Tutorial Street", city: "Appletown")

        var ray = Person(name: "Ray", address: headquarters)

        var brian = Person(name: "Brian", address: headquarters)

        假設Brain搬家到街對面的建筑物里,那么你會這樣更新他的地址:

        brian.address.fullAddress = "148 Tutorial Street"

        這樣做將會發生什么?錯誤出在什么地方呢?

        答案:Ray同樣會搬家到新的建筑物里面。Address是一個引用類型類,所以無論你是通過ray或者brain訪問headquarters,訪問都是同一個實例化對象。headquarters對象的變化也會引起ray和brain的變化。你能想象如果Brain收到Ray的郵件或者相反Ray收到Brain的郵件,將會發生什么?解決方案是創建一個新的Address對象賦值給Brain或者把Address聲明成為結構體而不是一個類。

        中級

        問題1– Swift 2.0 or later

        思考下面的代碼:

        var optional1: String? = nil

        var optional2: String? = .None

        答案:兩者沒有什么不同。Optional.None(簡稱.None)是optional變量值初始化的標準方法,而nil只是.None語法的一種修飾。事實上下面語句輸出是正確的:

        nil == .None // On Swift 1.x this doesnt compile. You need Optional

        .None

        記住枚舉類型的Optional下的None:

        enum Optional{

        case None

        case Some(T)

        }

        問題2-Swift 1.0 or later

        下面是thermometer作為類和結構體的例子:

        public class ThermometerClass {

        private(set) var temperature: Double = 0.0

        public func registerTemperature(temperature: Double) {

        self.temperature = temperature

        }

        }

        let thermometerClass = ThermometerClass()

        thermometerClass.registerTemperature(56.0)

        public struct ThermometerStruct {

        private(set) var temperature: Double = 0.0

        public mutating func registerTemperature(temperature: Double) {

        self.temperature = temperature

        }

        }

        let thermometerStruct = ThermometerStruct()

        thermometerStruct.registerTemperature(56.0)

        但是這段代碼編譯失敗了,請問哪里報錯,出錯的原因是什么。

        建議:在使用Playground之前,認真閱讀代碼并思考。

        答案:代碼的最后一行不會被編譯通過。ThermometerStruct結構體中正確的聲明了一個mutating屬性函數,它是用來改變結構體內部 temperature屬性的值的,但是編譯器不通過的原因是,通過let創建的不可變的registerTemperature結構體調用了 registerTemperature函數。

        問題3– Swift 1.0 or later

        下面的代碼輸出是什么?并說明理由。

        var thing = "cars"

        let closure = { [thing] in

        print("I love \(thing)")

        }

        thing = "airplanes"

        closure()

        答案:輸出的是:I love cars。當閉包被聲明的時候,抓捕列表就復制一份thing變量,所以被捕捉的值并沒有改變,即使你給thing賦了一個新值。

        如果你要忽視閉包中捕捉列表的值,那么編譯器引用那個值而不是復制。這種情況下,被引用變量的值的變化將會反映到閉包中,正如下面的代碼所示:

        var thing = "cars"

        let closure = {

        print("I love \(thing)")

        }

        thing = "airplanes"

        closure() // Prints "I love airplanes"

        問題4– Swift 2.0 or later

        下面是一個全局函數,這個函數的功能是計算數組中特殊值得個數。(待校驗)

        func countUniques(array: Array) -> Int {

        let sorted = array.sort(<)

        let initial: (T?, Int) = (.None, 0)

        let reduced = sorted.reduce(initial) { ($1, $0.0 == $1 ? $0.1 : $0.1 + 1) }

        return reduced.1

        }

        它使用了< 和==運算符,他們限制著T(占位類型)的實際類型,也就是說T必須遵循Comparable協議。你可以這樣使用它:

        countUniques([1, 2, 3, 3]) // result is 3

        現在要求你重寫上面的方法作為Array的擴展方法,然后你就可以這樣寫代碼:

        [1, 2, 3, 3].countUniques() // should print 3

        如何實現?

        答案:在Swift 2.0 中,泛類型可以使用類型約束條件被強制擴展。但是假如這個泛類型不滿足這個類型的約束條件,那么這個擴展方法既不可見也無法調用。

        所以countUniques全局函數可以作為Array的擴展方法被重寫如下:

        extension Array where Element: Comparable {

        func countUniques() -> Int {

        let sorted = sort(<)

        let initial: (Element?, Int) = (.None, 0)

        let reduced = sorted.reduce(initial) { ($1, $0.0 == $1 ? $0.1 : $0.1 + 1) }

        return reduced.1

        }

        }

        注意:只有元類型實現了Comparable協議新的方法才可以被使用。例如,如果你在全部是UIView對象的數組中調用countUniques,編譯器將會報錯。

        import UIKit

        let a = [UIView(), UIView()]

        a.countUniques() // compiler error here because UIView doesnt implement Comparable

        問題5- Swift 2.0 or later

        下面一個函數的功能是計算兩個double(optional)類型的數的相除的結果。在執行除法之前,必須提前滿足三個條件:

        被除數必須包含nil值

        除數必須為包含nil值

        除數不能為零

        func pide(pidend: Double?, by pisor: Double?) -> Double? {

        if pidend == .None {

        return .None

        }

        if pisor == .None {

        return .None

        }

        if pisor == 0 {

        return .None

        }

        return pidend! / pisor!

        }

        Swift筆試試題及其答案 2

        1、Swift和Objective-C有什么區別?

        1)Swift是強類型(靜態)語言,有類型推斷,Objective-C弱類型(動態)語言

        2)Swift面向協議編程,Objective-C面向對象編程

        3)Swift注重值類型,Objective-C注重引用類型

        4)Swift支持泛型,Objective-C只支持輕量泛型(給集合添加泛型)

        5)Swift支持靜態派發(效率高)、動態派發(函數表派發、消息派發)方式,Objective-C支持動態派發(消息派發)方式

        6)Swift支持函數式編程(高階函數)

        7)Swift的.協議不僅可以被類實現,也可以被Struct和Enum實現

        8)Swift有元組類型、支持運算符重載

        9)Swift支持命名空間

        10)Swift支持默認參數

        11)Swift比Objective-C代碼更簡潔

        2、講講Swift的派發機制

        1)函數的派發機制:靜態派發(直接派發)、函數表派發、消息派發

        2)Swift派發機制總結:

      【Swift筆試試題及其答案】相關文章:

      PHP筆試題及答案02-11

      java筆試題及答案08-20

      oracle筆試題及答案10-28

      華為筆試題及答案11-01

      java筆試題及答案02-09

      cad筆試試題及答案10-19

      高級網管筆試題及答案02-12

      PHP筆試題含答案02-11

      外貿筆試題目及答案10-17

      主站蜘蛛池模板: 栖霞市| 亚洲国产一区久久yourpan| 高清专区一区二区中文字幕| 泰州市| 日本在线免费精品视频| 久久亚洲av午夜福利精品| 成人av天堂一区二区| 久久久久久人妻一区精品| 东京热加勒比一区四区| 井冈山市| 少妇特殊按摩高潮惨叫无码| 女同一区二区三区不卡免费| 国产激情一区二区三区成人免费| 91久国产在线观看| 日本理伦一区二区三区| 偷拍熟女亚洲另类| 久久精品国产亚洲精品色婷婷| 寻甸| 亚洲AV无码一区二区一二区色戒 | 东源县| 久久青青草原国产精品最新片| 99久久久国产精品丝袜| 强d乱码中文字幕熟女1000部| 国产码欧美日韩高清综合一区| 免费一级欧美大片久久网| 富顺县| 红安县| 达州市| 威远县| 自治县| 长顺县| 屏南县| 沽源县| 成人小视频在线观看播放 | 亚洲激情在线观看第三页| 安泽县| 精品理论一区二区三区| 涞源县| yw193.can尤物国产在线网页| 伊人不卡中文字幕在线一区二区| 国产精品亚洲A∨无码遮挡|