[iOS/Swift] 앱 개발의 실무적 접근 방식으로 배우는 디자인 패턴 ~Composite~
                                            
                                                
                                                
                                                
                                                
                                                
                                                 8266 단어  iOSSwift신인 프로그래머 응원디자인 패턴
                    
매우 일반적인 iOS 앱 개발의 일반적인 상황
Swift의 핵심 라이브러리 및 프레임 워크에서 사용되는 패턴
주목하여 디자인 패턴을 다시 배워 본 기록입니다.
관련 기사 목록
[iOS/Swift] 앱 개발의 실무적 접근 방식으로 배우는 디자인 패턴
Composite 패턴 개요
사용소

인용구 : Cocoa Design Patterns (Retired Document)
샘플 코드
Swift 버전은 5.1입니다.
protocol DirectoryEntry {
    var name: String { get }
    func remove()
}
final class File: DirectoryEntry {
    let name: String
    init(name: String) {
        self.name = name
    }
    func remove() {
        print("\(name)を削除しました")
    }
}
final class Directory: DirectoryEntry {
    let name: String
    private var entryList = [DirectoryEntry]()
    init(name: String) {
        self.name = name
    }
    func add(entry: DirectoryEntry) {
        entryList.append(entry)
    }
    func remove() {
        for entry in entryList {
            entry.remove()
        }
        print("\(name)を削除しました")
    }
}
// Usage
let dir1 = Directory(name: "dir1")
let file1 = File(name: "file1")
dir1.add(entry: file1)
// dir1
//   ∟file1
let dir2 = Directory(name: "dir2")
let file2 = File(name: "file2")
let file3 = File(name: "file3")
dir2.add(entry: file2)
dir2.add(entry: file3)
// dir2
//   ∟file2
//   ∟file3
dir1.add(entry: dir2)
// dir1
//   ∟file1
//   ∟dir2
//     ∟file2
//     ∟file3
let file4 = File(name: "file4")
dir1.add(entry: file4)
// dir1
//   ∟file1
//   ∟dir2
//     ∟file2
//     ∟file3
//   ∟file4
dir1.remove()
// "file1を削除しました"
// "file2を削除しました"
// "file3を削除しました"
// "dir2を削除しました"
// "file4を削除しました"
// "dir1を削除しました"
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여([iOS/Swift] 앱 개발의 실무적 접근 방식으로 배우는 디자인 패턴 ~Composite~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/y-some/items/43ca08e421f80954e916
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
protocol DirectoryEntry {
    var name: String { get }
    func remove()
}
final class File: DirectoryEntry {
    let name: String
    init(name: String) {
        self.name = name
    }
    func remove() {
        print("\(name)を削除しました")
    }
}
final class Directory: DirectoryEntry {
    let name: String
    private var entryList = [DirectoryEntry]()
    init(name: String) {
        self.name = name
    }
    func add(entry: DirectoryEntry) {
        entryList.append(entry)
    }
    func remove() {
        for entry in entryList {
            entry.remove()
        }
        print("\(name)を削除しました")
    }
}
// Usage
let dir1 = Directory(name: "dir1")
let file1 = File(name: "file1")
dir1.add(entry: file1)
// dir1
//   ∟file1
let dir2 = Directory(name: "dir2")
let file2 = File(name: "file2")
let file3 = File(name: "file3")
dir2.add(entry: file2)
dir2.add(entry: file3)
// dir2
//   ∟file2
//   ∟file3
dir1.add(entry: dir2)
// dir1
//   ∟file1
//   ∟dir2
//     ∟file2
//     ∟file3
let file4 = File(name: "file4")
dir1.add(entry: file4)
// dir1
//   ∟file1
//   ∟dir2
//     ∟file2
//     ∟file3
//   ∟file4
dir1.remove()
// "file1を削除しました"
// "file2を削除しました"
// "file3を削除しました"
// "dir2を削除しました"
// "file4を削除しました"
// "dir1を削除しました"
Reference
이 문제에 관하여([iOS/Swift] 앱 개발의 실무적 접근 방식으로 배우는 디자인 패턴 ~Composite~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/y-some/items/43ca08e421f80954e916텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)