[iOS] [Swift] Sequence Protocol의 샘플 코드(사내 학습회 자료)

15759 단어 SwiftiOS

개시하다


자사 내 학습회에서는 세quence Protocol에서 빈번하게 사용되는 물품을 소개하고 샘플 코드를 첨부했다.
코드는 간단하지만 어렵게 쓴 것이 회사 내부에만 남아 있는 것은 아쉽기 때문에 공개한다.
참가자들에게'문제'(답안 삭제)를 보내고,'손잡이'등을 만들어 보면 즐거울 것이다

컨디션


・Xcode 10.1
・Swift4.2

샘플 코드


Sequence.playground
import UIKit

struct Student {
    var code: String
    var firstName: String
    var lastName: String
    var score: Int
    var fullName: String {
        return firstName + " " + lastName
    }
}

var students = [Student]()
students.append(Student(code: "AB100000", firstName: "Taro", lastName: "Yamada", score: 62))
students.append(Student(code: "AB100001", firstName: "Ichiro", lastName: "Suzuki", score: 81))
students.append(Student(code: "AB100002", firstName: "Hanako", lastName: "Sato", score: 96))
students.append(Student(code: "AB100003", firstName: "Jiro", lastName: "Takahashi", score: 58))
students.append(Student(code: "AB100004", firstName: "Ichiro", lastName: "Tanaka", score: 75))
students.append(Student(code: "AB100005", firstName: "Hanako", lastName: "Yamada", score: 96))

// 70点以上の生徒を抽出する
let filtered = students.filter { (student) -> Bool in
    return student.score >= 70
}
for (i, student) in filtered.enumerated() {
    print("70点以上の生徒\(i+1)人目は\(student.fullName)です。")
}
/*
70点以上の生徒1人目はIchiro Suzukiです。
70点以上の生徒2人目はHanako Satoです。
70点以上の生徒3人目はIchiro Tanakaです。
70点以上の生徒4人目はHanako Yamadaです。
*/

// "コード, フルネーム"という形式の文字列の配列に変換する
let stringArray = students.map { (student) -> String in
    return "\(student.code), \(student.fullName)"
}
stringArray.forEach {
    print($0)
}
/*
AB100000, Taro Yamada
AB100001, Ichiro Suzuki
AB100002, Hanako Sato
AB100003, Jiro Takahashi
AB100004, Ichiro Tanaka
AB100005, Hanako Yamada
*/

// 全生徒の点数を合計する
let total = students.reduce(0) { (total, student) -> Int in
    return total + student.score
}
print("全生徒のScoreの合計は\(total)点です")
/*
全生徒のScoreの合計は468点です
*/

// key=コード、value=フルネームというDictionaryに変換する
let dic = students.reduce(into: [String: String]()) { (dic, student) in
    return dic[student.code] = student.fullName
}
dic.forEach {
    print($0)
}
/*
(key: "AB100000", value: "Taro Yamada")
(key: "AB100001", value: "Ichiro Suzuki")
(key: "AB100003", value: "Jiro Takahashi")
(key: "AB100004", value: "Ichiro Tanaka")
(key: "AB100005", value: "Hanako Yamada")
(key: "AB100002", value: "Hanako Sato")
*/

// Satoが含まれているか?
let existsSato = students.contains { (student) -> Bool in
    return student.lastName == "Sato"
}
print("Satoさんが含まれているか = \(existsSato)")
/*
Satoさんが含まれているか = true
*/

// Yamadaさんの1件目を取得する
let first = students.first { (student) -> Bool in
    return student.lastName == "Yamada"
}
if let first = first {
    print(first.fullName)
} else {
    print("見つかりませんでした")
}
/*
Taro Yamada
*/

// FirstName>LastName順にソートする
let sorted = students.sorted { (student1, student2) -> Bool in
    if student1.firstName == student2.firstName {
        return student1.lastName < student2.lastName
    } else {
        return student1.firstName < student2.firstName
    }
}
for (i, student) in sorted.enumerated() {
    print("FirstName>LastName順の生徒\(i+1)人目は\(student.fullName)です。")
}
/*
FirstName>LastName順の生徒1人目はHanako Satoです。
FirstName>LastName順の生徒2人目はHanako Yamadaです。
FirstName>LastName順の生徒3人目はIchiro Suzukiです。
FirstName>LastName順の生徒4人目はIchiro Tanakaです。
FirstName>LastName順の生徒5人目はJiro Takahashiです。
FirstName>LastName順の生徒6人目はTaro Yamadaです。
*/

학습회에서 사용한 참고 자료


샘플 코드로 소개하는 것 외에 나는 또 많은 편리한 방법이 있다고 생각한다.
4SwiftDoc.org
• 샘플 코드 있음
• 일람성이 뛰어나 찾기 쉽다
그래서 나는 학습회의 교재로서 매우 쓰기 좋다고 생각한다.
Sequence Protocol 프로젝트는 여기에 있습니다.
https://swiftdoc.org/v4.2/protocol/sequence/

좋은 웹페이지 즐겨찾기