欧美日韩国产在线高清视频_久久99精品久久久久久噜噜丰满_日日摸夜夜添夜夜添影院视频_久久精品无码一区二区日韩av

當(dāng)前位置:高考升學(xué)網(wǎng) > 筆試面試 > 正文

Swift 面試題及其答案

更新:2023-09-19 07:59:13 高考升學(xué)網(wǎng)

雖然Swift出生才一年,但是它已經(jīng)成為最流行的編程語言之一了。它的語法很簡單,以至于當(dāng)它發(fā)布的時候,java script開發(fā)者感覺就像下圖一樣。

  事實(shí)上,Swift是一種復(fù)雜的語言。它包含面向?qū)ο蠛秃瘮?shù)方法這兩個方面,并且隨著新版本的發(fā)布在一直進(jìn)化。

  你可以用這些問題來測試應(yīng)聘者關(guān)于Swift方面的知識水,或者測試一下你自己。如果你不知道答案,沒關(guān)系,沒一個問題下面都有答案供你學(xué)習(xí)。

  這些問題包含兩個方面:

  筆試問題:通過電子郵件做一個編程測試是極好的,因?yàn)檫@涉及到寫大量的代碼,從代碼質(zhì)量上可以看出一個人的水。

  面試問題:電話面試或者面對面面試也是很好的,因?yàn)閷γ嬖囌邅碚f口頭交流會更方面。

  每個方面有分成三個等級:

  初級:適合讀了一到兩本有關(guān)Swift的書,并且已經(jīng)開始用Swift開發(fā)應(yīng)用程序的初學(xué)者。

  中級:適合那些對Swift語言的概念有深刻理解和強(qiáng)烈興趣的,并且一直在閱讀大量有關(guān)Swift的博客文章并進(jìn)行實(shí)踐的中級工程師。

  高級:適合那些以探索Swift語言知識為樂趣,挑戰(zhàn)自己,使用前言技術(shù)的人們。

  假如你想回答這些問題,我建議你在回答這些問題之前,打開Playground運(yùn)行一下這些問題的代碼。這些問題的答案都在Xcode 7.0 Beta 6 版本中測試過。

  準(zhǔn)備好了嗎?系好安全帶,現(xiàn)在就開始!

  筆試問題

  初學(xué)者

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

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

  print("Hello!")

  }

  答案:

  for _ in 0...4 {

  print("Hello!")

  }

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

  0...4

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

  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中結(jié)構(gòu)體是值類型,他們的值是復(fù)制的而不是引用的。下面的一行代碼意思是復(fù)制了tutorial1的值并把它賦值給tutorial2:

  var tutorial2 = tutorial1

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

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

  問題3 – Swift 1.0 or later

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

  import UIKit

  var view1 = UIView()

  view1.alpha = 0.5

  let view2 = UIView()

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

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

  view2 = view1 // Error: view2 is immutable

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

  let view2 = UIView()

  view2.alpha = 0.5 // Yes!

  問題4 – Swift 1.0 or later

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

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

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

  return one < two

  }

  答案:

  第一個簡化的是參數(shù)。系統(tǒng)的參數(shù)類型推斷功能,可以計(jì)算出閉包里面參數(shù)的類型,所以你不必定義參數(shù)的類型:

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

  函數(shù)返回值也可以被推斷出來,所以簡化掉,代碼變?yōu)椋?/p>

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

  這個$i 符號可以代替參數(shù)名字,代碼進(jìn)一步簡化為:

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

  在一個獨(dú)立的閉包內(nèi),return這個關(guān)鍵字是可以省略的。最后聲明的返回值就是閉包的返回值:

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

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

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

  func Bool

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

  let sortedAnimals = animals.sort(<)

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

  問題5 – Swift 1.0 or later

  下面的代碼創(chuàng)建了兩個類Address和Person,并且創(chuàng)建了兩個實(shí)例對象分別代表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)

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

  brian.address.fullAddress = "148 Tutorial Street"

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

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

  中級

  問題1– Swift 2.0 or later

  思考下面的代碼:

  var optional1: String? = nil

  var optional2: String? = .None

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

  nil == .None // On Swift 1.x this doesn't compile. You need Optional

  .None

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

  enum Optional{

  case None

  case Some(T)

  }

  問題2-Swift 1.0 or later

  下面是thermometer作為類和結(jié)構(gòu)體的例子:

  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)

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

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

  答案:代碼的最后一行不會被編譯通過。ThermometerStruct結(jié)構(gòu)體中正確的聲明了一個mutating屬性函數(shù),它是用來改變結(jié)構(gòu)體內(nèi)部temperature屬性的值的,但是編譯器不通過的原因是,通過let創(chuàng)建的不可變的registerTemperature結(jié)構(gòu)體調(diào)用了registerTemperature函數(shù)。

  問題3– Swift 1.0 or later

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

  var thing = "cars"

  let closure = { [thing] in

  print("I love \(thing)")

  }

  thing = "airplanes"

  closure()

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

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

  var thing = "cars"

  let closure = {

  print("I love \(thing)")

  }

  thing = "airplanes"

  closure() // Prints "I love airplanes"

  問題4– Swift 2.0 or later

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

  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

  }

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

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

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

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

  如何實(shí)現(xiàn)?

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

  所以countUniques全局函數(shù)可以作為Array的擴(kuò)展方法被重寫如下:

  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

  }

  }

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

  import UIKit

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

  a.countUniques() // compiler error here because UIView doesn't implement Comparable

  問題5- Swift 2.0 or later

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

  被除數(shù)必須包含nil值

  除數(shù)必須為包含nil值

  除數(shù)不能為零

  func divide(dividend: Double?, by divisor: Double?) -> Double? {

  if dividend == .None {

  return .None

  }

  if divisor == .None {

  return .None

  }

  if divisor == 0 {

  return .None

  }

  return dividend! / divisor!

  }

  上面的函數(shù)可以正常使用,但是會存在兩個問題:


相關(guān)文章

最新圖文

常見的hr面試官面試問題大全

時間:2023-09-14 23:0:24

企業(yè)面試官面試問題及參考

時間:2023-09-17 08:0:27

高校教師招聘面試答辯100題

時間:2023-09-17 06:0:03
欧美日韩国产在线高清视频_久久99精品久久久久久噜噜丰满_日日摸夜夜添夜夜添影院视频_久久精品无码一区二区日韩av
<strike id="6q0um"></strike>
  • <strike id="6q0um"><s id="6q0um"></s></strike>
  • <ul id="6q0um"></ul><strike id="6q0um"></strike>
    美脚の诱脚舐め脚责91| 国产精品免费网站在线观看| 亚洲男人的天堂网| 5858s免费视频成人| 国产精品国产三级国产三级人妇| 日本色综合中文字幕| 91网址在线看| 五月天久久比比资源色| 久久久影院官网| 日本午夜精品一区二区三区电影| 久久久青草青青国产亚洲免观| 性做久久久久久免费观看| 久久久久久久精| 蜜桃一区二区三区在线观看| 日本一区二区三区免费乱视频| 在线观看亚洲a| 最好看的中文字幕久久| 国产精品18久久久久久vr| 亚洲欧美一区二区三区久本道91| 日韩无一区二区| 天使萌一区二区三区免费观看| 久久亚区不卡日本| 欧美色手机在线观看| 亚洲另类在线视频| 不卡高清视频专区| 色婷婷国产精品久久包臀| 国产精品区一区二区三| 国产成人午夜片在线观看高清观看| 亚洲精品视频一区二区| 久久综合色综合88| 蜜桃视频第一区免费观看| 亚洲欧洲另类国产综合| 精品伦理精品一区| 久久99精品久久久久久久久久久久| 中文字幕中文字幕在线一区| 欧美不卡一区二区三区四区| 日韩vs国产vs欧美| 中文字幕中文在线不卡住| 日韩免费观看高清完整版在线观看| 亚洲第一会所有码转帖| 国产欧美中文在线| 日韩美女在线视频| 精品影视av免费| 亚洲自拍偷拍九九九| 国产精品成人免费在线| 丁香激情综合国产| 欧美日韩中文字幕一区二区| 亚洲福利视频一区二区| 国产精品国产三级国产普通话三级| 精品捆绑美女sm三区| 国内成人精品2018免费看| 亚洲一区二区三区美女| 最新中文字幕一区二区三区| 97久久久精品综合88久久| 欧美日韩国产三级| 日韩国产欧美一区二区三区| 亚洲精品欧美综合四区| 亚洲国产精品国自产拍av| 成人v精品蜜桃久久一区| 欧美色图一区二区三区| 日韩二区在线观看| 夜色激情一区二区| 亚洲免费资源在线播放| 国产欧美中文在线| 国产视频一区不卡| www.欧美色图| 欧美一区二区三区在| 久久精品国产亚洲5555| 亚洲成人在线免费| 一级日本不卡的影视| 中文字幕亚洲一区二区va在线| 国产精品网站在线观看| 91在线观看高清| 精品入口麻豆88视频| 成人中文字幕电影| 在线观看91精品国产麻豆| 久久精品噜噜噜成人88aⅴ| 日本高清视频一区二区| 日韩高清在线电影| 亚洲超碰精品一区二区| 亚洲成人动漫av| 亚洲综合一二区| 亚洲已满18点击进入久久| 亚洲精品五月天| 亚洲一二三区在线观看| 亚洲欧美激情小说另类| 亚洲精品国产a久久久久久| 国产精品久久久久天堂| 国产精品成人免费精品自在线观看| 国产亚洲短视频| 国产精品久久三区| 国产精品伦一区二区三级视频| 中文字幕制服丝袜一区二区三区 | 日本亚洲欧美天堂免费| 色哟哟精品一区| 蜜臀av国产精品久久久久| 欧美在线小视频| 久久国产精品99久久人人澡| 欧美日韩二区三区| 国产精品一区二区在线看| 这里只有精品99re| 不卡区在线中文字幕| 久久色在线观看| 国产夜色精品一区二区av| 国产精品色噜噜| 中文字幕在线免费不卡| 亚洲影视在线播放| 色中色一区二区| 精品伊人久久久久7777人| 717成人午夜免费福利电影| 成人性生交大片免费看视频在线 | 亚洲愉拍自拍另类高清精品| 亚洲国产视频网站| 日本怡春院一区二区| 精品视频色一区| 成人午夜电影久久影院| 国产亚洲成av人在线观看导航| 国产欧美一区二区三区网站| 亚洲乱码中文字幕综合| 偷偷要91色婷婷| 狠狠狠色丁香婷婷综合激情| 日韩三级伦理片妻子的秘密按摩| 99riav久久精品riav| 中文字幕成人网| 亚洲丝袜精品丝袜在线| 日日摸夜夜添夜夜添国产精品| 欧美日韩一区二区三区在线| 成人免费高清视频| 国产精品久久久一区麻豆最新章节| 亚洲欧美日韩国产综合| 免费欧美高清视频| 欧美电影免费观看高清完整版在| 久久综合九色综合97婷婷女人| 亚洲女人****多毛耸耸8| 亚洲国产精品久久久男人的天堂 | 欧美日韩一区视频| a4yy欧美一区二区三区| 国产精品国产三级国产aⅴ中文| 亚洲精品欧美综合四区| 精品一区二区影视| 久久精品夜夜夜夜久久| 亚洲欧美日韩一区| 国精产品一区一区三区mba视频 | 久久疯狂做爰流白浆xx| 26uuu另类欧美亚洲曰本| 亚洲欧洲精品天堂一级| 蜜臀av一区二区| 26uuu欧美| 一区二区三区高清在线| 精品一区二区免费看| 久久先锋资源网| 自拍偷拍亚洲欧美日韩| 九九九精品视频| 久久久不卡影院| 亚洲一区二区三区美女| 国产成人午夜片在线观看高清观看| 国产精品久久久久久久久搜平片 | 首页欧美精品中文字幕| 日韩一区二区麻豆国产| 中文字幕一区二区三区乱码在线| 奇米精品一区二区三区在线观看一| 精品国产一区二区三区久久影院 | 日韩视频免费观看高清完整版在线观看 | 欧美变态tickle挠乳网站| 国产精品美女久久久久aⅴ国产馆| 日韩高清欧美激情| 久久亚区不卡日本| 亚洲成人综合在线| 91网站最新地址| 午夜a成v人精品| 精品国产免费视频| 亚洲妇女屁股眼交7| 成人亚洲一区二区一| 亚洲综合色区另类av| 日韩一区二区电影在线| 亚洲男女一区二区三区| 国产成人福利片| 一区二区三区中文字幕在线观看| 欧美二区在线观看| 亚洲人精品午夜| 国产成人精品一区二区三区网站观看| 亚洲欧美日韩在线不卡| 91精品国产色综合久久ai换脸 | 亚洲欧美色综合| 欧美一区二区三区免费在线看 | 亚洲一区二区在线免费观看视频| 日韩欧美精品在线| 亚洲综合色丁香婷婷六月图片| 成人av在线影院| 亚洲成人激情av| 国产午夜一区二区三区| 在线一区二区视频| 国产精品久久久久久亚洲毛片| 国产老肥熟一区二区三区| 一区二区不卡在线播放 | 欧美精品一区在线观看| 午夜精品久久一牛影视| 国产日产欧美一区| 国产成人午夜高潮毛片| 亚洲成人手机在线|