궁금한 내용을 검색해보세요!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
서근 개발노트
티스토리에 팔로잉
SWIFTUI/Others

SwiftUI : Markups과 Documentation을 추가하는 방법

서근
QUOTE THE DAY

-
Written by SeogunSEOGUN

반응형

Markups과 Documentation

Xcode에 코드를 작성하면서 코드를 Markup 하는 방법에 대해 알아보려고 합니다. 실제로 다른 개발자 혹은 자신을 위해서 코드에 섹션이나 메모를 하고 팀에서 일할 때 정말 좋은 Documentation을 만들 수 있습니다.

 

우선 아주 간단하게 뷰를 구성해주도록 하겠습니다.

import SwiftUI
 
struct DocumentationView: View {
    @State var data: [String] = [
     "Text", "Slider", "Environment"
    ]
    @State var showAlert: Bool = false
    
    var body: some View {
        NavigationView {
            ScrollView {
                Text("서근개발블로그")
                Text("서근개발블로그")
                Text("서근개발블로그")
                Text("서근개발블로그")
            }
            .navigationBarTitle("서근 개발 블로그")
            .navigationBarItems(trailing:
                                    Button(action: {
                                        showAlert.toggle()
                                    }) {
                                        Image(systemName: "star.circle.fill")
                                            .imageScale(.large)
                                    }
            )
            .alert(isPresented: $showAlert, content: {
                getAlert(text: "구독 부탁드립니다.")
            })
        }
    }
    func getAlert(text: String) -> Alert {
        return Alert(title: Text(text))
    }
}

struct DocumentationView_Previews: PreviewProvider {
    static var previews: some View {
        DocumentationView()
    }
}

코드를 살펴보면 Body가 최상단에 있고 그 아래에 Function 함수구 그아래에 Previews가 있습니다. 이것을 주석을 달아서 메모를 하거나 위치를 알기 쉽게 만드는 것이죠. 많은 언어에는 각자의 언어에 맞는 주석처리 방법이 있습니다. 

 

Xcode에서는 바로  //  입니다.  우선 Xcode의 미니맵을 활성화해주겠습니다. 단축키로는 + + + M 을 눌러서 활성화하거나 아래 경로처럼 직접 선택해 활성화할 수 있습니다.

섹션을 나눠서 주석으로 텍스트를 넣어줄때 개발자에 따라 다르지만 보통은 // MARK: some text 이런 식으로 소문자 또는 대문자를 사용하여 메모합니다. 

또 한줄을 주석 처리할 때는 // 을 사용할 수 있지만 만약 여러 줄을 주석처리해야 한다고 하면 /* */ 을 사용하여 여러 줄의 텍스트를 작성할 수 있습니다. 

    // MARK: BODY
    var body: some View {
        NavigationView {
            ScrollView {
                Text("서근개발블로그")
                Text("서근개발블로그")
                Text("서근개발블로그")
                Text("서근개발블로그")
            }
            // AlertView :
            
            /*
             1. showAlert 바인딩
             2. getAlert 함수 생성
             3. navigationBarItems에 버튼 추가
             */

한 가지 유용한 것이 있는데 바로 fold 처리 즉 코드 또는 주석 처리한 텍스트를 숨길 수 있습니다. 단축키는 ⌥+⌘+⬅︎(왼쪽 방향키)입니다. 원하는 부분에 커서를 가져다 놓고 fold를 하게 되면 아래와 같은 결과를 볼 수 있습니다.

다음은 아래와 같이 background 섹션과 foregroundLayer 섹션이 있다고 가정해볼게요. 

import SwiftUI

struct DocumentationView: View {
    
    // MARK: PROPERTIES
    
    @State var data: [String] = [
        "Text", "Slider", "Environment"
    ]
    @State var showAlert: Bool = false
    
    
    // MARK: BODY
    var body: some View {
        NavigationView {
               
            ZStack {
                // background View
                Color.yellow
                    .ignoresSafeArea()
                
                // foreground
                ScrollView {
                    ForEach(data, id: \.self) { index in
                        Text(index)
                            .font(.headline)
                            .foregroundColor(.primary)
                    }
                }

                .navigationBarTitle("서근 개발 블로그")
                .navigationBarItems(trailing:
                                        Button(action: {
                                            showAlert.toggle()
                                        }) {
                                            Image(systemName: "star.circle.fill")
                                                .imageScale(.large)
                                        }
                )
                .alert(isPresented: $showAlert, content: {
                    getAlert(text: "구독 부탁드립니다.")
            })
            }
        }
    }
    
    // MARK: FUNCTIONS
    
    func getAlert(text: String) -> Alert {
        return Alert(title: Text(text))
    }
}
    // MARK: PREVIEWS
struct DocumentationView_Previews: PreviewProvider {
    static var previews: some View {
        DocumentationView()
    }
}

Body 쪽이 조금 지저분하기 때문에 foregroundLayer라는 개인 변수를 만들어서 코드를 정리하겠습니다.

    // MARK: BODY
    var body: some View {
        NavigationView {
               
            ZStack {
                // background View
                Color.yellow
                    .ignoresSafeArea()
                
                // foreground
                foregroundLayer

                .navigationBarTitle("서근 개발 블로그")
                .navigationBarItems(trailing:
                                        Button(action: {
                                            showAlert.toggle()
                                        }) {
                                            Image(systemName: "star.circle.fill")
                                                .imageScale(.large)
                                        }
                )
                .alert(isPresented: $showAlert, content: {
                    getAlert(text: "구독 부탁드립니다.")
            })
            }
        }
    }
    
    
    var foregroundLayer: some View {
        ScrollView {
            ForEach(data, id: \.self) { index in
                Text(index)
                    .font(.headline)
                    .foregroundColor(.primary)
            }
        }
    }
    
    // MARK: FUNCTIONS
    
    func getAlert(text: String) -> Alert {
        return Alert(title: Text(text))
    }
}

bodyforegroundLayer⌥ + 클릭 을해서 documentation을 한번 확인해볼게요.

보시는 것처럼 아무런 정보가 나와있지 않기 때문에 협업을 할 때 좋지 않습니다. 이럴 때는 개발자가 수동으로 이것이 무슨 뷰 인지 정의해줄 수 있습니다. 바로 Back Slash 세 개를 넣어주는 것이죠.

또 다른 방법으로는 Add documentation을 사용하는 것입니다. 정보를 입력하고 싶은 코드에 ⌘+클릭해서 Add Documatation을 눌러줍니다.

이곳에 알맞은 정보를 입력해주면 되겠죠?

자 이렇게 Documentation을 작성해놓고 bodyalert로 가서 ⌥+클릭을 해보겠습니다.

추가로 메시지를 작성할 수 도 있습니다. DescriptionParameters 사이의 간격을 주고 가운데에 원하는 정보를 기입하면 됩니다.

    /// Alert를 사용하여 사용자에게 경고메세지를 보여줌
    ///
    ///     <--- 이곳에 작성
    /// 
    /// - Parameter text: Alert의 메세지가 오는 부분
    /// - Returns: Alert의 메세지와 함께 경고창 retrun
    // MARK: FUNCTIONS
    
    /// Alert를 사용하여 사용자에게 경고메세지를 보여줌
    ///
    ///  This function creates and returns an alert immediately. The alert will have a title based on the text pararmeter but it will NOT have a message
    ///
    /// - Parameter text: Alert의 메세지가 오는 부분
    /// - Returns: Alert의 메세지와 함께 경고창 retrun
    func getAlert(text: String) -> Alert {
        return Alert(title: Text(text))
    }
}

다음으로는 예시 코드를 넣어줄 수 있습니다. Discussion 아래에 ```  와 ``` 사이에 코드를 작성하면 됩니다.

    // MARK: FUNCTIONS
    
    /// Alert를 사용하여 사용자에게 경고메세지를 보여줌
    ///
    ///  This function creates and returns an alert immediately. The alert will have a title based on the text pararmeter but it will NOT have a message
    /// ```
    /// getAlert(text: "안녕하세요") -> Alert(title: Text("안녕하세요"))
    /// ```
    ///
    /// - Parameter text: Alert의 메세지가 오는 부분
    /// - Returns: Alert의 메세지와 함께 경고창 retrun
    func getAlert(text: String) -> Alert {
        return Alert(title: Text(text))
    }
}

경고 메시지를 추가할 수 도 있습니다.

    /// Alert를 사용하여 사용자에게 경고메세지를 보여줌
    ///
    ///  This function creates and returns an alert immediately. The alert will have a title based on the text pararmeter but it will NOT have a message
    /// ```
    /// getAlert(text: "안녕하세요") -> Alert(title: Text("안녕하세요"))
    /// ```
    ///
    /// - Warning: 이 Alert에는 추가 메세지가 없습니다.
    /// - Parameter text: Alert의 메세지가 오는 부분
    /// - Returns: Alert의 메세지와 함께 경고창 retrun

 

읽어주셔서 감사합니다🤟

 

 

'SWIFTUI > Others' 카테고리의 다른 글

SwiftUI : Mask  (3) 2021.05.30
SwiftUI : Gesture  (0) 2021.05.29
SwiftUI : ActionSheet  (0) 2021.05.12
SwiftUI : Sheet & FullScreenCover & Transition & Animation 비교  (0) 2021.05.11
SwiftUI : 애니메이션과 비슷한 Transitions  (0) 2021.05.10

잘못된 내용이 있으면 언제든 피드백 부탁드립니다.


서근


위처럼 이미지 와 함께 댓글을 작성할 수 있습니다.