第四周Swift考試答案 委托回調(diào)和代理區(qū)別

// 設(shè)計(jì)一個(gè)函數(shù)竹习,給出第一個(gè)數(shù)字、公差碍庵、元素個(gè)數(shù)绍载,返回一個(gè)等差數(shù)列的數(shù)組
func generateArithmeticProgression(startValue: Int, commonDifference: Int, numberOfElements: Int) -> [Int] {
    var array = [Int](count: numberOfElements, repeatedValue: 0)
    for i in 0..<array.count {
        array[i] = startValue + commonDifference * i
    }
    return array
}
print(generateArithmeticProgression(5, commonDifference: 3, numberOfElements: 10))


// 給出一個(gè)數(shù)組判斷是否為等差數(shù)列
func isProgression(array: [Int]) -> Bool {
    if array.count > 2 {
        let newArray = array.sort(<)
        let commonDiff = newArray[1] - newArray[0]
        for i in 1..<newArray.count - 1 {
            if newArray[i + 1] - newArray[i] != commonDiff {
                return false
            }
        }
    }
    return true
}
print(isProgression([1, 3, 4, 5, 6]))
print(isProgression([10, 8, 6, 4, 2]))
print(isProgression([300, 100, 200]))


// 設(shè)計(jì)一個(gè)函數(shù)給出一個(gè)長(zhǎng)度葛峻,生成一個(gè)那么長(zhǎng)度的由字母和數(shù)字組成的字符串驗(yàn)證碼
extension String {
    // 對(duì)字符串進(jìn)行擴(kuò)展
    var length: UInt32 {
        get { return UInt32(self.characters.count) }
    }
    
    subscript(index: Int) -> Character {
        get { return self[self.startIndex.advancedBy(index)] }
    }
}

func randomInt(min: UInt32, _ max: UInt32) -> Int {
    return Int(arc4random_uniform(max - min + 1) + min)
}

func generateVerificationCode(length: Int) -> String {
    var code = ""
    if length > 0 {
        let str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        for _ in 0..<length {
            // code.append(str[randomInt(0, UInt32(str.characters.count) - 1)])
            code.append(str[randomInt(0, str.length - 1)])
            //code.append(str[str.startIndex.advancedBy(randomInt(0, UInt32(str.characters.count) - 1))])
        }
    }
    return code
}

for _ in 1...10 {
    print(generateVerificationCode(4))
}




// 設(shè)計(jì)一個(gè)學(xué)生找槍手考試的場(chǎng)景
// 代理模式
protocol ExamCandidate: class {
    func answerTheQuestion()
}

class LazyStudent: ExamCandidate {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func answerTheQuestion() {
    }
}

class Gunman: ExamCandidate {
    var name: String
    var target: LazyStudent?
    
    init(name: String) {
        self.name = name
    }
    
    func answerTheQuestion() {
        if let stu = target {
            print("姓名: \(stu.name)")
            print("奮筆疾書(shū)答案")
            print("提交試卷")
        }
    }
}

let stu = LazyStudent(name: "王大錘")
let gun = Gunman(name: "駱昊")
gun.target = stu
gun.answerTheQuestion()


// 委托回調(diào)模式
protocol ExamDelegate: class {
    
    func answerTheQuestion()
}

class LazyStudent {
    var name: String
    weak var delegate: ExamDelegate?
    
    init(name: String) {
        self.name = name
    }
    
    func joinExam() {
        print("姓名: \(name)")
        delegate?.answerTheQuestion()
    }
}

class Gunman: ExamDelegate {
    
    func answerTheQuestion() {
        print("奮筆疾書(shū)各種答案")
    }
}

let stu = LazyStudent(name: "王大錘")
let gun = Gunman()
stu.delegate = gun
stu.joinExam()




// 設(shè)計(jì)一個(gè)員工類(lèi)和部門(mén)類(lèi)薄辅,寫(xiě)上他們各自的屬性和方法
enum Gender {
    case Male
    case Female
}

class Employee {
    var id: String
    var name: String
    var gender: Gender
    var tel: String?
    weak var dept: Department?
    
    init(id: String, name: String, gender: Gender) {
        self.id = id
        self.name = name
        self.gender = gender
    }
    
    func work() {
        print("工號(hào)為\(id)的\(name)正在工作.")
    }
    
    func haveRest() {
        print("\(name)正在休息.")
    }
}

class Department {
    var id: String
    var name: String
    var empsArray: [Employee] = []
    
    var numberOfEmps: Int {
        get { return empsArray.count }
    }
    
    init(id: String, name: String) {
        self.id = id
        self.name = name
    }
    
    func addEmp(emp: Employee) {
        empsArray.append(emp)
    }
    
    func removeEmp(id: String) -> Bool {
        if let index = empsArray.indexOf({ $0.id == id }) {
            empsArray.removeAtIndex(index)
            return true
        }
        return false
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末要拂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子站楚,更是在濱河造成了極大的恐慌脱惰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件源请,死亡現(xiàn)場(chǎng)離奇詭異枪芒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)谁尸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纽甘,“玉大人良蛮,你說(shuō)我怎么就攤上這事『酚” “怎么了决瞳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)左权。 經(jīng)常有香客問(wèn)我皮胡,道長(zhǎng),這世上最難降的妖魔是什么赏迟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任屡贺,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甩栈。我一直安慰自己泻仙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布量没。 她就那樣靜靜地躺著玉转,像睡著了一般。 火紅的嫁衣襯著肌膚如雪殴蹄。 梳的紋絲不亂的頭發(fā)上究抓,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音袭灯,去河邊找鬼刺下。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妓蛮,可吹牛的內(nèi)容都是我干的怠李。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蛤克,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捺癞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起构挤,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤髓介,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后筋现,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體唐础,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年矾飞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了一膨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洒沦,死狀恐怖豹绪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情申眼,我是刑警寧澤瞒津,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站括尸,受9級(jí)特大地震影響巷蚪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜濒翻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一屁柏、第九天 我趴在偏房一處隱蔽的房頂上張望啦膜。 院中可真熱鬧,春花似錦前联、人聲如沸功戚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)啸臀。三九已至,卻和暖如春烁落,著一層夾襖步出監(jiān)牢的瞬間乘粒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工伤塌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灯萍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓每聪,卻偏偏與公主長(zhǎng)得像旦棉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子药薯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容