<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>미닛메이드(Minnit Made)</title>
    <link>https://minnit-develop.tistory.com/</link>
    <description>minnit 이 직접 만들어 가는 개발  블로그</description>
    <language>ko</language>
    <pubDate>Fri, 22 May 2026 05:55:43 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Minnit</managingEditor>
    <image>
      <title>미닛메이드(Minnit Made)</title>
      <url>https://tistory1.daumcdn.net/tistory/3392096/attach/868cb03a8d2d406b8bd2883688985c8b</url>
      <link>https://minnit-develop.tistory.com</link>
    </image>
    <item>
      <title>[Swift] CaseIterable Protocol을 이용해 Enum cases 반복하기</title>
      <link>https://minnit-develop.tistory.com/37</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요. 미닛메이드 Minnit 입니다 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오랜만이네요..ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 코드들을 참고하다가 enum 옆에 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CaseIterable 가 많이 눈에 들어오더라구요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 CaseIterable의 개념과 어느 경우에 사용될 수 있는지를 알아보도록 하겠습니다 !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;CaseIterable&amp;nbsp;&lt;/b&gt;란&lt;b&gt;&amp;nbsp;&lt;/b&gt;뭘까요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Apple 의 공식 문서를 확인해보면&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-05 오후 5.22.07.png&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcWxaR/btrLk3SH3O7/aStSm6bueELOAV1b6JhVwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcWxaR/btrLk3SH3O7/aStSm6bueELOAV1b6JhVwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcWxaR/btrLk3SH3O7/aStSm6bueELOAV1b6JhVwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcWxaR%2FbtrLk3SH3O7%2FaStSm6bueELOAV1b6JhVwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1492&quot; height=&quot;418&quot; data-filename=&quot;스크린샷 2022-09-05 오후 5.22.07.png&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Protocol로 &quot;모든 값들의 &lt;b&gt;collection을 제공&lt;/b&gt;한다&quot; 라고 하네요!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Swift에서는 Collection Type으로 3가지를 제공해주고 있는데&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;바로 &lt;u&gt;Array, Set, Dictionary&lt;/u&gt; 가 있죠??&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Collection을 제공한다 라는 말은&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;Collection Type처럼 사용할 수 있게 도와준다&lt;/u&gt; 라는 말로 들리네요!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;더 자세히 말하면 CaseIterable를 선언 시 사용할 수 있는 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;allCases가 Collection Type으로 되어있기 때문이죠 ⭕️&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1662368396834&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static var allCases: Self.AllCases { get }
associatedtype AllCases : Collection = [Self] where Self == Self.AllCases.Element&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 이 CaseIterable을 enum에 사용하면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Collection Type에서 사용하는 다양한 메소드(ex. map, count 등)를 사용할 수 있게 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 enum에 존재하는 &lt;u&gt;모든 case들을 나열 혹은 반복&lt;/u&gt;하고 싶을 때 주로 사용하게 됩니다  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예시를 들어볼게요  &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1662367225372&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum FontStyle: CaseIterable {
    case title
    case subtitle
    case sectionTitle
    case body
    case comment
}

let enumCount = FontStyle.allCases.count
let enumCaseName = FontStyle.allCases.map { &quot;\($0) 스타일&quot; }.joined(separator: &quot;, &quot;)

// enumCount: 5
// enumCaseName: title 스타일, subtitle 스타일, sectionTitle 스타일, body 스타일, comment 스타일&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이런 식으로 CaseIterable을 넣으면 생기는 allCases property를 이용하여&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;count로 case의 개수를 셀 수도 있고, map과 같은 고차 함수도 사용할 수 있네요&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오호라.. 이거 잘 쓰면 편리하겠는데요 ?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;CaseIterable를 어떻게 활용하면 좋을까 해서 조금 더 찾아봤습니다 !&lt;/p&gt;
&lt;pre id=&quot;code_1662368985943&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum TextType: CaseIterable {
    case title
    case subtitle
    case sectionTitle
    case body
    case comment
}

var fonts = [TextType : UIFont]()

for type in TextType.allCases {
    switch type {
    case .title:
        fonts[type] = .preferredFont(forTextStyle: .headline)
    case .subtitle:
        fonts[type] = .preferredFont(forTextStyle: .subheadline)
    case .sectionTitle:
        fonts[type] = .preferredFont(forTextStyle: .title2)
    case .body:
        fonts[type] = .preferredFont(forTextStyle: .body)
    case .comment:
        fonts[type] = .preferredFont(forTextStyle: .footnote)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;enum의 case으로 Font 유형을 정의한 후 CaseIterable를 사용하는 경우인데요,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;allCases를 이용해서 모든 케이스를 돌면서 특정 case마다 폰트 타입을 정의했습니다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그러면 ~~~&lt;/p&gt;
&lt;pre id=&quot;code_1662369136197&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let nameLabel: UILabel = UILabel()
nameLabel.text = &quot;이름표&quot;
nameLabel.font = fonts[.title]&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 label의 font에 활용을 할 수 있습니다 !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저는 UIFont Extension을 따로 만들어서 font를 설정하는 방식을 주로 사용했는데&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이런 방법도 사용할 수 있겠네요  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그럼 모든 enum에 CaseIterable를&amp;nbsp;사용할 수 있을까요?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공식문서 하단을 보면&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The compiler can automatically provide an implementation of the&amp;nbsp;CaseIterable &amp;nbsp;requirements for any enumeration without associated values or&amp;nbsp;@available &amp;nbsp;attributes on its cases. The synthesized&amp;nbsp;allCases &amp;nbsp;collection provides the cases in order of their declaration.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;컴파일러는 자동으로 &lt;b&gt;연관 값이나 @available 속성이 없는&lt;/b&gt; 모든 열거에 대한 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CaseIterable 요구 사항의 구현을 제공할 수 있다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라는 말은 즉 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;@availble 속성이 있거나 연관 값(Associated Value)이 있다면 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;CaseIterable을 사용할 수 없다&lt;/span&gt;는 말이 되겠쥬 ?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 말이 공식 문서에 2번이나 언급되어 있어서&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조금 더 자세히 보고 갈게요 !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 Associated Value 바로 연관 값입니다 !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;연관 값은 열거형에 첨가된 추가 정보로&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1662368203304&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum FontStyle {
    case title(Int)
    case subtitle(Int)
    case sectionTitle
    case body
    case comment
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;case 중 title과 subtitle case는 (Int)의 연관 값을 가지고 있는 상태입니다 !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Raw Values와는 다른 개념인 거 아시죠?ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정말 연관 값이나 @&lt;span style=&quot;color: #000000;&quot;&gt;availble 속성이&amp;nbsp;&lt;/span&gt;있으면 CaseIterable를 사용할 수 없는 걸까요 ?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;바로 테스트를 해봤습니다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckcxcj/btrLnskfe7S/1gv6L0ycdu3R4t9DFlOLd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckcxcj/btrLnskfe7S/1gv6L0ycdu3R4t9DFlOLd1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1978&quot; data-origin-height=&quot;410&quot; data-filename=&quot;스크린샷 2022-09-05 오후 6.04.20.png&quot; style=&quot;width: 45.8779%; margin-right: 10px;&quot; data-widthpercent=&quot;46.42&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckcxcj/btrLnskfe7S/1gv6L0ycdu3R4t9DFlOLd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fckcxcj%2FbtrLnskfe7S%2F1gv6L0ycdu3R4t9DFlOLd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1978&quot; height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pUxmE/btrLlEL2iBe/sK7BdcNzLdksBAEgpqdRL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pUxmE/btrLlEL2iBe/sK7BdcNzLdksBAEgpqdRL1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;2016&quot; data-origin-height=&quot;362&quot; data-filename=&quot;스크린샷 2022-09-05 오후 6.02.39.png&quot; data-widthpercent=&quot;53.58&quot; style=&quot;width: 52.9594%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pUxmE/btrLlEL2iBe/sK7BdcNzLdksBAEgpqdRL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpUxmE%2FbtrLlEL2iBe%2FsK7BdcNzLdksBAEgpqdRL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2016&quot; height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&quot;Type 'FontStyle' does not conform to protocol 'CaseIterable'&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Do you want to add protocol stubs?&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라는 에러가 나오는 것을 볼 수 있습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;( 못 믿어서 미안해요... )&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;연관 값이나 @&lt;span style=&quot;color: #000000;&quot;&gt;availble 속성이 있는 enum에서 CaseIterable를 사용할 수 없으니 대체할 거냐&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, allCases를 직접 정의할 것이냐를 물어보고 있네요 !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;직접 구현해서 사용한다면 이렇게 연관 값이 있는 case는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;직접 기본값을 넣어서 구현을 해주면 됩니다 !&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1664945662890&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum FontStyle: CaseIterable {    
    static var allCases: [FontStyle] {
        return [title(0), subtitle(0), sectionTitle, body, comment]
    }
    
    case title(Int)
    case subtitle(Int)
    case sectionTitle
    case body
    case comment
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 CaseIterable의 개념과 사용을 알아보았습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot; data-reactroot=&quot;&quot;&gt;오늘도 공식문서에 대한 신뢰감을 쌓고 가네요 !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;혹시 틀린 점 있거나 더 궁금한 점이 있다면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot; data-reactroot=&quot;&quot;&gt;댓글로 남겨주세요 ⭐️&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot; data-reactroot=&quot;&quot;&gt;오늘도 감사합니다 :)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;[참고 링크]&lt;/p&gt;
&lt;figure id=&quot;og_1664946925595&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apple Developer Documentation&quot; data-og-description=&quot;&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/documentation/swift/caseiterable&quot; data-og-url=&quot;https://developer.apple.com/documentation/swift/caseiterable&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/swift/caseiterable&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/documentation/swift/caseiterable&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1664946909427&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Enum with associated value does not conform to CaseIterable and throws error&quot; data-og-description=&quot;The following enum works fine without any error. enum EnumOptions: CaseIterable { case none case mild case moderate case severe case unmeasurable } When I ...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/61757785/enum-with-associated-value-does-not-conform-to-caseiterable-and-throws-error&quot; data-og-url=&quot;https://stackoverflow.com/questions/61757785/enum-with-associated-value-does-not-conform-to-caseiterable-and-throws-error&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bwd0cl/hyP2h33dqD/beCfmUzVZuBlKzF8FF8u90/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/61757785/enum-with-associated-value-does-not-conform-to-caseiterable-and-throws-error&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/61757785/enum-with-associated-value-does-not-conform-to-caseiterable-and-throws-error&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bwd0cl/hyP2h33dqD/beCfmUzVZuBlKzF8FF8u90/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Enum with associated value does not conform to CaseIterable and throws error&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The following enum works fine without any error. enum EnumOptions: CaseIterable { case none case mild case moderate case severe case unmeasurable } When I ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1664946984406&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Enum iterations in Swift | Swift by Sundell&quot; data-og-description=&quot;With each new release, Swift keeps getting better and better at creating compiler-generated implementations of common boilerplate. With things like Codable and synthesized conformances to Equatable and Hashable, we can now leverage the compiler to use its &quot; data-og-host=&quot;www.swiftbysundell.com&quot; data-og-source-url=&quot;https://www.swiftbysundell.com/articles/enum-iterations-in-swift-42/&quot; data-og-url=&quot;https://www.swiftbysundell.com/articles/enum-iterations-in-swift-42/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/S9VWB/hyP19rpLY6/NjuE3zHgJkNkl759Ro2mkk/img.png?width=1500&amp;amp;height=1500&amp;amp;face=0_0_1500_1500&quot;&gt;&lt;a href=&quot;https://www.swiftbysundell.com/articles/enum-iterations-in-swift-42/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.swiftbysundell.com/articles/enum-iterations-in-swift-42/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/S9VWB/hyP19rpLY6/NjuE3zHgJkNkl759Ro2mkk/img.png?width=1500&amp;amp;height=1500&amp;amp;face=0_0_1500_1500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Enum iterations in Swift | Swift by Sundell&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;With each new release, Swift keeps getting better and better at creating compiler-generated implementations of common boilerplate. With things like Codable and synthesized conformances to Equatable and Hashable, we can now leverage the compiler to use its&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.swiftbysundell.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develop/Swift</category>
      <category>apple</category>
      <category>CaseIterable</category>
      <category>enum</category>
      <category>ios</category>
      <category>Native</category>
      <category>SWIFT</category>
      <category>스위프트</category>
      <author>Minnit</author>
      <guid isPermaLink="true">https://minnit-develop.tistory.com/37</guid>
      <comments>https://minnit-develop.tistory.com/37#entry37comment</comments>
      <pubDate>Wed, 5 Oct 2022 14:12:27 +0900</pubDate>
    </item>
    <item>
      <title>[Swift] WWDC22 Complications and widgets: Reloaded</title>
      <link>https://minnit-develop.tistory.com/36</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요. 미닛메이드 Minnit 입니다 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;WWDC2022 요약 첫번째로 올린 Push To Talk에 이어서&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 애플에서 드디어 제공하게 된&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;잠금화면을 커스텀 할 수 있는..!!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(물론 안드로이드 폰에 비해 커스텀 제약이 많지만  )&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;고론 API와 소개 영상이 공개되었습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 부분은 정말 많은 사람들이 기다려 왔을 것 같아요 ~&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그럼 이번에도 간단하게 요약해보겠습니다  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Complications&amp;nbsp;and&amp;nbsp;widgets&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;잠금 화면의 액세서리 위젯 + WatchOS complication을&amp;nbsp;만들 수 있게 도와주는 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;새로운 Api가 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;WidgetKit&lt;/span&gt; 에 추가되었습니다&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 제공되는 Watch의 complication이 위젯 형태로 한눈에 알아볼 수 있는 WidgetKit으로 재탄생하였습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드 한 번으로 &lt;u&gt;iOS16과 watchOS 둘 다에 사용&lt;/u&gt;될 수 있기 때문에 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발자에게도 좋은 소식인 것 같습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;( 잠금화면 위젯, 애플 워치 컴플리케이션)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 말하는 &lt;b&gt;Complication&lt;/b&gt;은&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플워치 페이스에 존재하는 작은 인터페이스 요소들을 말합니다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-06-14 오전 9.24.01.png&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;784&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/clockkit/creating_complications_for_your_watchos_app&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wXPfq/btrELVLEwnZ/QYhwDJb3LnksqXlHP8mtu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwXPfq%2FbtrELVLEwnZ%2FQYhwDJb3LnksqXlHP8mtu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;211&quot; height=&quot;286&quot; data-filename=&quot;스크린샷 2022-06-14 오전 9.24.01.png&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;Complications&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;새로운 위젯 종류&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;WidgetKit의 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.apple.com/documentation/widgetkit/widgetfamily&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;WidgetFamily&lt;/a&gt;에서 &amp;ldquo;&lt;b&gt;accessory&lt;/b&gt;&amp;rdquo;로 시작하는 case들을 추가했습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;691&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BFJQU/btrECvg8JpA/puQkO2w8xydS3oqu2LPBBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BFJQU/btrECvg8JpA/puQkO2w8xydS3oqu2LPBBK/img.png&quot; data-alt=&quot;accessoryRectangular&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BFJQU/btrECvg8JpA/puQkO2w8xydS3oqu2LPBBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBFJQU%2FbtrECvg8JpA%2FpuQkO2w8xydS3oqu2LPBBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;538&quot; height=&quot;290&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;691&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;accessoryRectangular&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #c1bef9;&quot;&gt;&lt;a style=&quot;color: #000000; background-color: #c1bef9;&quot; href=&quot;https://developer.apple.com/documentation/widgetkit/widgetfamily/accessoryrectangular&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;accessoryRectangular&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;직사각형 모양의 위젯으로, &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 줄의 Text를 보여주거나 간단한 그래프나 차트 나타내기가 가능한 위젯입니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;( ClockKit에서 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.apple.com/documentation/clockkit/clkcomplicationfamily/graphicrectangular&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;graphicRectangular &lt;/a&gt;와 유사 )&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ5EBo/btrEJJLs7Ri/6gSprnAbg15n0OcSh5u2u1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ5EBo/btrEJJLs7Ri/6gSprnAbg15n0OcSh5u2u1/img.png&quot; data-alt=&quot;accessoryCircular&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ5EBo/btrEJJLs7Ri/6gSprnAbg15n0OcSh5u2u1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ5EBo%2FbtrEJJLs7Ri%2F6gSprnAbg15n0OcSh5u2u1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;553&quot; height=&quot;296&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;684&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;accessoryCircular&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #c1bef9;&quot;&gt;&lt;a style=&quot;color: #000000; background-color: #c1bef9;&quot; href=&quot;https://developer.apple.com/documentation/widgetkit/widgetfamily/accessorycircular&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;accessoryCircular&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원형 모양의 위젯으로, &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;게이지 및 progress 보기에 알맞은 위젯입니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;( ClockKit에서&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.apple.com/documentation/clockkit/clkcomplicationfamily/graphiccircular&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;graphicCircular&lt;/a&gt; 와 유사 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J3hvv/btrEGKFzKwL/wr9bxKkT8JLy4g7FSyrG5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J3hvv/btrEGKFzKwL/wr9bxKkT8JLy4g7FSyrG5k/img.png&quot; data-alt=&quot;accessoryInline&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J3hvv/btrEGKFzKwL/wr9bxKkT8JLy4g7FSyrG5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ3hvv%2FbtrEGKFzKwL%2Fwr9bxKkT8JLy4g7FSyrG5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;581&quot; height=&quot;306&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;674&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;accessoryInline&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #c1bef9;&quot;&gt;&lt;a style=&quot;color: #000000; background-color: #c1bef9;&quot; href=&quot;https://developer.apple.com/documentation/widgetkit/widgetfamily/accessoryinline&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;accessoryInline&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시간 위에 표시할 수 있는 Text 전용 위젯으로 다양한 크기로 제공됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRA586/btrEH35xB1h/OytqsD6IJ8W67iDMTav3D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRA586/btrEH35xB1h/OytqsD6IJ8W67iDMTav3D1/img.png&quot; data-alt=&quot;accessoryCorner&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRA586/btrEH35xB1h/OytqsD6IJ8W67iDMTav3D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRA586%2FbtrEH35xB1h%2FOytqsD6IJ8W67iDMTav3D1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;475&quot; height=&quot;456&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;accessoryCorner&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #c1bef9;&quot;&gt;&lt;a style=&quot;color: #000000; background-color: #c1bef9;&quot; href=&quot;https://developer.apple.com/documentation/widgetkit/widgetfamily/accessorycorner&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;accessoryCorner&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;WatchOS 에만 해당되고, 시계 모서리에 있는 위젯입니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Colors and Rendering Mode&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;a style=&quot;background-color: #ffc9af;&quot; href=&quot;https://developer.apple.com/documentation/widgetkit/widgetrenderingmode&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;WidgetRenderingMode&lt;/a&gt;&lt;/span&gt; 은 위젯이 표시될 수 있는 3가지 렌더링 모드를 제공합니다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wlrHb/btrEJw6VrLO/LZW717ZPAMqYgLSqvmdZwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wlrHb/btrEJw6VrLO/LZW717ZPAMqYgLSqvmdZwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wlrHb/btrEJw6VrLO/LZW717ZPAMqYgLSqvmdZwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwlrHb%2FbtrEJw6VrLO%2FLZW717ZPAMqYgLSqvmdZwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;489&quot; height=&quot;298&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;780&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫 번째, &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;a style=&quot;background-color: #c1bef9;&quot; href=&quot;https://developer.apple.com/documentation/widgetkit/widgetrenderingmode/fullcolor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;fullColor&lt;/a&gt;&lt;/span&gt; 는 콘텐츠가 지정한 대로 정확하게 표시가 되는 모드로, &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;날씨 혹은 활동 ring 처럼 색상이 화려한 위젯에 적용하는 것을 추천합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 번째, &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;a style=&quot;background-color: #c1bef9;&quot; href=&quot;https://developer.apple.com/documentation/widgetkit/widgetrenderingmode/accented&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;accented&lt;/a&gt;&lt;/span&gt;&amp;nbsp;는 보기가 accent group 과 default group으로 나눠져 있습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;불투명도만 유지하면서 색상은 단조롭게 표시가 되는 모드입니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;세 번째, &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;a style=&quot;background-color: #c1bef9;&quot; href=&quot;https://developer.apple.com/documentation/widgetkit/widgetrenderingmode/vibrant&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;vibrant&lt;/a&gt;&lt;/span&gt; 는 콘텐츠의 채도가 낮아진 채로 잠금화면의 background에 적용됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 가독성을 위해 투명한 색상 사용하지 않는 것을 권장합니다&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;간단하게 새롭게 WidgetKit에 추가되는 accessory case들을 살펴보았습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;영상 뒤에는 예제를 가지고 실습하는 내용이라 작성하지 않았지만,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 코드가 궁금하신 분들은 영상 후반부를 시청해주세요 !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플 워치에서 적용되던 작고 귀여운 위젯을&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아이폰 잠금화면에서도 만나볼 수 있다니..  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다양한 앱에서 얼른 출시해주면 좋겠네요 ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 애플 워치, 아이폰 따로 위젯을 만들 필요 없이&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한 번에 적용된다는 점이 메리트 있는 것 같습니다  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;요즘 조금씩 SwiftUI 공부 를 하고 있는데&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;열심히 공부해서 위젯도 만들어봐야겠네요 ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;혹시 더 궁금하신 부분이 있다면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;댓글 남겨주세요 !  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플 WWDC2022 - Complications and widgets: Reloaded의&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원본 영상은 여기 있습니다 !&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1655170498561&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Complications and widgets: Reloaded - WWDC22 - Videos - Apple Developer&quot; data-og-description=&quot;Our widgets code-along returns as we adventure onto the watchOS and iOS Lock Screen. Learn about the latest improvements to WidgetKit...&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/videos/play/wwdc2022/10050/&quot; data-og-url=&quot;https://developer.apple.com/videos/play/wwdc2022/10050/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mAriF/hyOLcQG1qH/Tl5OwRY1ngWxupddhaNIMk/img.jpg?width=500&amp;amp;height=282&amp;amp;face=0_0_500_282&quot;&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2022/10050/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/videos/play/wwdc2022/10050/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mAriF/hyOLcQG1qH/Tl5OwRY1ngWxupddhaNIMk/img.jpg?width=500&amp;amp;height=282&amp;amp;face=0_0_500_282');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Complications and widgets: Reloaded - WWDC22 - Videos - Apple Developer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Our widgets code-along returns as we adventure onto the watchOS and iOS Lock Screen. Learn about the latest improvements to WidgetKit...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develop/Swift</category>
      <category>apple</category>
      <category>applewatch</category>
      <category>ios</category>
      <category>ios16</category>
      <category>SWIFT</category>
      <category>watchOS</category>
      <category>widget</category>
      <category>WWDC2022</category>
      <category>애플세계개발자회의</category>
      <author>Minnit</author>
      <guid isPermaLink="true">https://minnit-develop.tistory.com/36</guid>
      <comments>https://minnit-develop.tistory.com/36#entry36comment</comments>
      <pubDate>Tue, 14 Jun 2022 10:45:46 +0900</pubDate>
    </item>
    <item>
      <title>[Swift] WWDC22 Enhance voice communication with Push to Talk</title>
      <link>https://minnit-develop.tistory.com/35</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요. 미닛메이드 Minnit 입니다 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 6월 둘째 주에 열린 애플 세계 개발자 회의 WWDC22 !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;iOS16에서 볼 수 있는 새롭고 업그레이드된 기능들 중에&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제가 관심 있는 영상을 모아 모아 정리해보았습니다 ~&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 영상은 애플워치에서만 제공했던 &quot;워키토키&quot; 기능을&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;iPhone에서도 서비스할 수 있게 API 제공을 시작한다고 합니다&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;간단하게 요약해보겠습니다  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PushToTalk Framework 란?&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;iOS의 새로운 오디오 커뮤니케이션 class로, iOS 앱에서 워키토키 통신을 통해 빠른 커뮤니케이션 진행하도록 도와주는 Framework이다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위에서도 말했지만 한마디로 애플워치 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;watchOS 5.3 이후 사용할 수 있는 앱 서비스인&amp;nbsp;&lt;/span&gt;&quot;워키토키&quot; 를 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앱에서도 구현할 수 있게 Apple에서 만들어준 서비스입니다 !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이름하여 &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;Push To Talk Framework&lt;/span&gt;&amp;nbsp; (a.k.a PTT)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PTT의 서비스 방법&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. session join Button( 채널 입장 버튼)을 통해 채널에 참가합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 채널에 참가한 사용자는 하루 종일 이 채널 안의 사용자들과 오디오를 송수신할 수 있게 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 마이크 버튼(Talk Button)을 누른 채로 말하게 되면, 이 채널에 들어와 있는 다른 사용자들에게 내 오디오가 송신됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 핸드폰이 잠겨있는 상태 혹은 Background 상태에서도 alert이 뜨기 때문에 쉽게 이용이 가능합니다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBfPps/btrEzJrjgHC/lSoENxph6l0pkzORXAgDE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBfPps/btrEzJrjgHC/lSoENxph6l0pkzORXAgDE1/img.png&quot; data-origin-width=&quot;1166&quot; data-origin-height=&quot;1458&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.2415%; margin-right: 10px;&quot; data-widthpercent=&quot;48.81&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBfPps/btrEzJrjgHC/lSoENxph6l0pkzORXAgDE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBfPps%2FbtrEzJrjgHC%2FlSoENxph6l0pkzORXAgDE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1166&quot; height=&quot;1458&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUqYyO/btrExGCoygn/d9aBmkSYkoQ2Z2gE02qlYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUqYyO/btrExGCoygn/d9aBmkSYkoQ2Z2gE02qlYk/img.png&quot; data-origin-width=&quot;1238&quot; data-origin-height=&quot;1476&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.5957%;&quot; data-widthpercent=&quot;51.19&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUqYyO/btrExGCoygn/d9aBmkSYkoQ2Z2gE02qlYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUqYyO%2FbtrExGCoygn%2Fd9aBmkSYkoQ2Z2gE02qlYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1238&quot; height=&quot;1476&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;(왼) 잠금화면에서 왼쪽 상단 파란색 Fill 클릭 시 (오) Background 상태에서 오디오 송수신시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스 사용방법은 우리가 애플워치에서 사용했던, &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;혹은 다른 어플에서 사용했던 워키토키의 기능과 같습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;워키토키는 전화와는 다르게 무전기 방식인데,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;무전기는 우리가 아는 것처럼 버튼을 누르고 있는 동안에만 내 오디오가 송신되고,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 버튼에서 손을 떼면 내 오디오가 상대방에게 송신되지 않습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 방식과 동일하게 앱에서는 &lt;b&gt;Talk 버튼을 누른 상태에서&lt;/b&gt;&amp;nbsp;이야기하면 내 목소리가 오디오가 송신되고,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Talk 버튼에서 손을 떼면&lt;/b&gt;&amp;nbsp;송신이 끊기는 형식으로 구현되었습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PTT의 장점&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫 번째, &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;배터리 절약&lt;/span&gt;이 가능합니다  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PTT는 Apple Push Notification service token(APNs Token) 을 제공해서 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Session 진행 동안 &lt;u&gt;백그라운드에서 앱을 깨워서&lt;/u&gt; 오디오 송신/수신이 가능합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 말은, 오디오를 송수신하지 않을 때는 앱이 자고 있어도 괜찮기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;배터리 절약에 효율적이라는 말이겠죠 .. !?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 번째,  &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;투명성&lt;/span&gt;을 지원합니다  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;채널에 접속한 누군가의 오디오가 재생될 때는 &lt;u&gt;말하는 사람을 표시&lt;/u&gt;하여&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자에게 투명성을 제공해줍니다 !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본 설정 순서&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. push to talk &lt;b&gt;background mode&lt;/b&gt; 활성화&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. push to talk 기능 추가하기&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. push notification 기능을 추가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(audio 재생하기 위해 너의 앱을 백그라운드 모드에서 깨워주는 역할)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 유저한테 microphone permission 요구&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(info.plist 에 작성)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스 개발 및 Delegate 호출&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. &lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.apple.com/documentation/pushtotalk/ptchannelmanager/4031737-channelmanager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;channelManager&lt;/span&gt;&lt;/a&gt;를 생성자를 만들어줍니다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1655020043578&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class func channelManager(
    delegate: PTChannelManagerDelegate,
    restorationDelegate: PTChannelRestorationDelegate,
    completionHandler: @escaping (PTChannelManager?, Error?) -&amp;gt; Void
)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;channel manager delegate랑 channel manager restoration delegate 를 정의해줘야 합니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 생성자는 appdelegate의 didFinishlaunchingWithOptions method에 작성하면 됩니다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;2. &lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.apple.com/documentation/pushtotalk/ptchannelmanager/4031740-requestjoinchannel&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;requestJoinChannel &lt;/span&gt;&lt;/a&gt;함수를 이용해 채널에 참여하기&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;채널을 확인할 수 있는(=고유한) UUID 와 채널 설명을 제공해야합니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한 번에 하나의 채널만 활성화 가능합니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;채널 설명에는 이미지랑 이름이 들어갸아합니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;foreground 상태에서만 join 이 가능합니다 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 만약 채널 참가에 성공했다면&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PTChannelManagerDelegate의 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.apple.com/documentation/pushtotalk/ptchannelmanagerdelegate/4002149-channelmanager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;didJoinChannel&lt;/span&gt;&lt;/a&gt;이 호출되며 join 된 것을 알 수 있습니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;receivedEphemeralPushToken에서 &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;APNs push token&lt;span style=&quot;color: #000000;&quot;&gt;을 받을 수 있습니다&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 만약 채널 참가에 실패했다면&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.apple.com/documentation/pushtotalk/ptchannelmanagerdelegate/4031746-channelmanager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;failedToJoinChannel&lt;/span&gt;&lt;/a&gt;이 호출되면서 실패를 알려줍니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다른 채널에서 이미 활동중인데 또 다른 채널에 들어가려고 했을 때도 실패로 기록됩니다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. 채널에 있다가 나갈때&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.apple.com/documentation/pushtotalk/ptchannelmanagerdelegate/4002150-channelmanager&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;didLeaveChannel&lt;/a&gt;이&amp;nbsp;호출&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전송 과정 및 호출 Delegate 순서&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.apple.com/documentation/pushtotalk/ptchannelmanager/4031739-requestbegintransmitting&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;requestBeginTransmitting&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; : 내가 참가해 있는 채널로 오디오 전송 시작할 때(= &lt;b&gt;내가 말할 때&lt;/b&gt;) 사용&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앱이 &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;foreground&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 상태일 때 혹은 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;주변 블루투스 장치 변화에 반응&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;했을 때( 블루투스 장치가 연결 혹은 해제됐을 때 앱이 깨어날 수 있어서인듯!)사 사용하는 함수&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;failedToBeginTransmittingInChannel : &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;전송 실패 시 호출되는 delegate 함수&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;didBeginTransmittingFrom &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;: 전송 시작을 알리는 delegate 호출&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;didActivate&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;: 오디오 세션이 활성화 되었음을 알리는 delegate 호출&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 함수들은 사용자가 이제 recording을 시작해도 된다는 시그널입니다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.apple.com/documentation/pushtotalk/ptchannelmanager/4031741-stoptransmitting&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;stopTransmitting&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; : 전송 stop시 (= &lt;b&gt;말 끝났을 때&lt;/b&gt;) 사용&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;failedToStopTransmittingInChannel&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; : 전송 종료 실패 시 호출되는 delegate 함수&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;didEndTransmittingFrom&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; : 전송 종료를 알리는 delegate 호출&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;didDeactivate &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;: 오디오 세션 비활성화를 알리는 delegate 호출&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전송 중일때 &lt;u&gt;핸드폰에 전화오거나 페이스타임이 와서 오디오가 중단되는 경우&lt;/u&gt;도 있기 때문에 이런 경우에 대해서도 handling필요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;New APNs push 작동&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;나의 push to talk 서버가 다른 유저가 전송한 새로운 음성을 가지고 있을 때,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;( = 채널에 있는 다른 유저가 말했을 때)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이것은 유저에게 채널 입장할 때 받은 &lt;b&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;device push token&lt;/span&gt;&lt;/b&gt;을 사용해서 &lt;b&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;push to talk notification&lt;/span&gt;&lt;/b&gt;을 보내게 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앱이 push notification을 받았을 때, 이것은 반드시 프레임워크에서 활동중인 speaker에게 알려주기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시스템이 앱의 오디오 세션을 활성화하고 재생을 시작할 수 있습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;APNs push type을 request header에 &amp;ldquo;&lt;b&gt;pushtoken&lt;/b&gt;&amp;rdquo;으로 설정한 후&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;APNs topic header를 앱의 번들 idenfitier에 &amp;ldquo;.&lt;b&gt;voip-ptt&lt;/b&gt;&amp;rdquo; 를 뒤에 붙여서 설정합니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;효율에 진심인 애플.. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플워치에서만 제공해주던 워키토키 기능을 폰에서도 사용할 수 있다니&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이걸로 재밌는 기능을 많이 만들어볼 수 있지 않을까요?ㅎㅎ&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;물론 안드로이드 사용자와는 함께 session에 참가할 수는 없겠지만..&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라이딩 어플에서 워키토키 기능을 많이 사용한다고 알고 있는데,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정식 버전이 나오면 한번 구현해보고 싶네요!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;혹시 더 궁금하신 부분이 있다면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;댓글 남겨주세요 !  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한, 요약된 부분이 있기 때문에 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;꼭 영상을 보시는 것을 추천드려요 ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플 WWDC22 - Enhance&amp;nbsp;voice&amp;nbsp;communication&amp;nbsp;with&amp;nbsp;Push&amp;nbsp;to&amp;nbsp;Talk의&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원본영상은 여기 있습니다 !&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1655020926153&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Enhance voice communication with Push to Talk - WWDC22 - Videos - Apple Developer&quot; data-og-description=&quot;We're coming in loud and clear to help you bring walkie-talkie communication to your app &amp;mdash; over! Discover how you can add prominent...&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/videos/play/wwdc2022/10117/&quot; data-og-url=&quot;https://developer.apple.com/videos/play/wwdc2022/10117/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/K79N3/hyOJCWpIp3/aBqX4ThlLgmAQA1oGv6u6k/img.jpg?width=500&amp;amp;height=282&amp;amp;face=0_0_500_282&quot;&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2022/10117/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/videos/play/wwdc2022/10117/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/K79N3/hyOJCWpIp3/aBqX4ThlLgmAQA1oGv6u6k/img.jpg?width=500&amp;amp;height=282&amp;amp;face=0_0_500_282');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Enhance voice communication with Push to Talk - WWDC22 - Videos - Apple Developer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;We're coming in loud and clear to help you bring walkie-talkie communication to your app &amp;mdash; over! Discover how you can add prominent...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Develop/Swift</category>
      <category>apple</category>
      <category>ios</category>
      <category>ios16</category>
      <category>PTT</category>
      <category>PushToTalk</category>
      <category>SWIFT</category>
      <category>WWDC</category>
      <category>WWDC22</category>
      <category>애플세계개발자회의</category>
      <category>워키토키</category>
      <author>Minnit</author>
      <guid isPermaLink="true">https://minnit-develop.tistory.com/35</guid>
      <comments>https://minnit-develop.tistory.com/35#entry35comment</comments>
      <pubDate>Sun, 12 Jun 2022 17:10:37 +0900</pubDate>
    </item>
    <item>
      <title>[Swift/코드한줄] Print 문 프로퍼티 - separator, terminator</title>
      <link>https://minnit-develop.tistory.com/34</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;코드 한 줄에 대해 기록합니다. 의식의 흐름을 따라갑니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드를 짜면서 제일 많이 사용하는 함수가 무엇일까.. 하면 Print문이라고 생각하는데&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇기 때문에 Print 함수의 공식 문서를 참고해본 사람은 드문 거 같다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;print 함수 == 출력 함수로 누구나 알고 있으니!&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651478708091&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apple Developer Documentation&quot; data-og-description=&quot;&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/documentation/swift/1541053-print&quot; data-og-url=&quot;https://developer.apple.com/documentation/swift/1541053-print&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/swift/1541053-print&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/documentation/swift/1541053-print&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;print(&amp;rdquo;Hello World&amp;rdquo;) 로 주로 사용하기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우리는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;func print(_ item: Any)&lt;/span&gt; 의 형태라고 생각하겠지만..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실 print문의 정의는&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;func print(_ items: Any..., separator: String = &quot; &quot;, terminator: String = &quot;\n&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;separator&lt;/span&gt;&lt;/b&gt;과 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;terminator&lt;/b&gt;&lt;/span&gt; Parameter가 있는 걸 알 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본값이 지정이 되어있었기 때문에 우리가 입력해주지 않아도 잘 굴러갔던 것 ~&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #c1bef9;&quot;&gt;&lt;b&gt;separator&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;A string to print between each item. The default is a single space (&quot; &quot;).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 item 사이에 입력할 string 값. 기본 값은 &lt;b&gt;&amp;ldquo; &amp;ldquo; 공백&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;print(1,2,3,4,5) &amp;rarr; 1 2 3 4 5&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;print(1,2,3,4,5, separator: &amp;ldquo; and &amp;ldquo;) &amp;rarr; 1 and 2 and 3 and 4 and 5*&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #c1bef9;&quot;&gt;&lt;b&gt;terminator&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;The string to print after all items have been printed. The default is a newline (&quot;\n&quot;).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모든 item을 출력한 후에 출력할 string 값. 기본 값은 &lt;b&gt;&amp;ldquo;\n&amp;rdquo; 엔터(newline)값&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 모든 item을 출력한 후에 &amp;ldquo;끝이다&quot; 라고 쓰고 싶다면?&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;print(1,2,3,4,5, terminator: &amp;ldquo; 끝이다&quot;) &amp;rarr; &lt;b&gt;1 2 3 4 5 끝이다&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;for문&lt;/u&gt;에서 사용해보기&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 엔터로 구분하지 않고 한 줄에 다 출력하고 싶다면 print(n, terminator = &amp;ldquo;&amp;rdquo;) 로 작성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 만약 내가 i번째라고 문구를 입력하고 싶다면 print(&amp;rdquo;\(n)번째&quot;)라고 적어도 되지만 print(n, terminator = &amp;ldquo;번째\n&amp;rdquo;)이라고 적어도 같다&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;엇? print(n, separator: &amp;ldquo;번째\n&amp;rdquo;)도 똑같은 거 아닌가여? &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 출력해보면 번째는 나오지 않고 숫자만 나오게 됨. 왜냐면 separator의 정의는 각 item 사이에 넣는 것인데, 여기서 item은 i 하나이고 for문으로 여러 개의 print문이 출력되는 것이기 때문에 5개의 print문은 서로 관계가 없는 item이므로 &lt;b&gt;item이 print문당 1개&lt;/b&gt;이기 &lt;b&gt;때문에 각 아이템 사이에 넣는 spearator의 string은 출력되지 않는 것&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;for i in 1...5 { print(i, separator: &quot;번째\n&quot;) } -&amp;gt; 출력 결과 : 1 2 3 4 5&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;for i in 1...5 { print(n) } &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;-&amp;gt; 출력 결과 : 1&lt;/span&gt; 2 3 4 5&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Print문에도 property가 있다 ~!&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따봉 프린트문아 고마워&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2022년 5월 6일 코드한줄  끗 -_-]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develop/Swift</category>
      <category>apple</category>
      <category>ios</category>
      <category>Print</category>
      <category>separator</category>
      <category>SWIFT</category>
      <category>Terminator</category>
      <category>줄바꿈</category>
      <category>코드한줄</category>
      <author>Minnit</author>
      <guid isPermaLink="true">https://minnit-develop.tistory.com/34</guid>
      <comments>https://minnit-develop.tistory.com/34#entry34comment</comments>
      <pubDate>Fri, 6 May 2022 15:26:47 +0900</pubDate>
    </item>
    <item>
      <title>[Swift/코드한줄] Timer.invalidate()</title>
      <link>https://minnit-develop.tistory.com/33</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;코드 한 줄에 대해 기록합니다. 의식의 흐름을 따라갑니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Timer에서 &lt;span style=&quot;background-color: #99cefa;&quot;&gt;invalidate()&lt;/span&gt; 함수의 정의를 보면&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;타이머를 중지하고 loop에서 제거해주는 역할을 하는 함수&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이라고 작성되어있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지정된 &lt;u&gt;&lt;b&gt;타이머를 제거하는 유일한 방법&lt;/b&gt;&lt;/u&gt;이라고 한다&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(참고로 timer = nil 한다고 이미 시작된 타이머가 초기화되진 않는다...^^ 하하)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;근데 invalidate() 함수를 작성했는데도 타이머가 계속 진행되는 문제가 발생해서&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;왜일지 알아보았다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 timer.invalidate()를 실행했는데도 불구하고 타이머가 계속 실행이 된다면 두 가지 중 이유가 있을 텐데&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 타이머가 중복돼서 실행된 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 타이머를 설정하는 코드가 2번 실행됐다면 timer.invalidate() 한다고 해서 2번이 모두 취소가 되는 게 아니라 1번만 취소가 되는 구조였다..! &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그러니깐 꼭 중복돼서 코드가 실행되지 않는지 확인해봐야 한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 타이머의 실행과 취소가 서로 다른 스레드 일 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 경우가 제일 많을 것 같은데, 공식 문서를 보면 꼭 타이머를 설치한 스레드와 같은 스레드에서 보내야 한다고 쓰여있는 것을 확인했다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1532&quot; data-origin-height=&quot;334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kUJnM/btryOyWxEjq/1tf22KtdlVKW8ySmYqGvQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kUJnM/btryOyWxEjq/1tf22KtdlVKW8ySmYqGvQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kUJnM/btryOyWxEjq/1tf22KtdlVKW8ySmYqGvQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkUJnM%2FbtryOyWxEjq%2F1tf22KtdlVKW8ySmYqGvQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;801&quot; height=&quot;175&quot; data-origin-width=&quot;1532&quot; data-origin-height=&quot;334&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇기 때문에 1번의 이유도 아닌데 취소가 안된다고 하면 print(&amp;rdquo;\(T&lt;u&gt;hread.current.threadName&lt;/u&gt;)&amp;rdquo;) 로 스레드를 확인해보는 것을 추천한다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따봉 공식 문서야 고마워&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2022년 4월 7일 코드한줄  끗 -_-&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649394016381&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apple Developer Documentation&quot; data-og-description=&quot;&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/documentation/foundation/timer/1415405-invalidate&quot; data-og-url=&quot;https://developer.apple.com/documentation/foundation/timer/1415405-invalidate&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/foundation/timer/1415405-invalidate&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/documentation/foundation/timer/1415405-invalidate&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Develop/Swift</category>
      <category>apple</category>
      <category>Invalidate</category>
      <category>ios</category>
      <category>NSObject</category>
      <category>SWIFT</category>
      <category>thread</category>
      <category>timer</category>
      <category>Xcode</category>
      <category>코드한줄</category>
      <author>Minnit</author>
      <guid isPermaLink="true">https://minnit-develop.tistory.com/33</guid>
      <comments>https://minnit-develop.tistory.com/33#entry33comment</comments>
      <pubDate>Fri, 8 Apr 2022 14:01:51 +0900</pubDate>
    </item>
    <item>
      <title>[Xcode] Xcode Error: abort trap 6</title>
      <link>https://minnit-develop.tistory.com/32</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;갑자기 개발 잘하다가 Xcode에서 처음 보는 에러가 발생하였다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드에는 빨간줄 하나도 없는 상태에서 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Abort Trap: 6&lt;/span&gt; &lt;/b&gt;라니..&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-03-08 오후 3.45.10.png&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzWSTB/btrvdQn4oip/hLLXkspDYFUQlVdI17f0AK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzWSTB/btrvdQn4oip/hLLXkspDYFUQlVdI17f0AK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzWSTB/btrvdQn4oip/hLLXkspDYFUQlVdI17f0AK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzWSTB%2FbtrvdQn4oip%2FhLLXkspDYFUQlVdI17f0AK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;878&quot; height=&quot;88&quot; data-filename=&quot;스크린샷 2022-03-08 오후 3.45.10.png&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;StackOverFlow에서 해답을 찾을 수 있었다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;guard let 구문을 사용할 때&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;let exampleText: String?
        
guard let exampleText = exampleText else { return }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위의 코드처럼 양쪽의 변수 이름을 같게 설정해 둔 것이 있었는데 이것을 다르게 수정해주니 에러가 해결되었다.. ^^&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이런 식으로 코드 짠 적 많은데 처음 마주친 에러였다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모두 &lt;u&gt;guard let 변수명 수정&lt;/u&gt;해보세요~..&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;@미닛메이드&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;참고&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646722124315&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Command failed due to signal: Abort trap: 6&quot; data-og-description=&quot;Since Xcode 7 and Swift 2.0, I get the error above, like in the screenshot shown here: I have no idea where this is coming from, cleaning and deleting derived data didn't work. Anyone else experi...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/30724897/command-failed-due-to-signal-abort-trap-6&quot; data-og-url=&quot;https://stackoverflow.com/questions/30724897/command-failed-due-to-signal-abort-trap-6&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bVm28A/hyNElVrpMi/N1DrI5zaxJLf79yQKtFVxk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/30724897/command-failed-due-to-signal-abort-trap-6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/30724897/command-failed-due-to-signal-abort-trap-6&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bVm28A/hyNElVrpMi/N1DrI5zaxJLf79yQKtFVxk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Command failed due to signal: Abort trap: 6&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Since Xcode 7 and Swift 2.0, I get the error above, like in the screenshot shown here: I have no idea where this is coming from, cleaning and deleting derived data didn't work. Anyone else experi...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develop/iOS</category>
      <category>abort trap 6</category>
      <category>err</category>
      <category>error</category>
      <category>guard let</category>
      <category>ios</category>
      <category>StackOverflow</category>
      <category>SWIFT</category>
      <category>Xcode</category>
      <category>엑스코드</category>
      <author>Minnit</author>
      <guid isPermaLink="true">https://minnit-develop.tistory.com/32</guid>
      <comments>https://minnit-develop.tistory.com/32#entry32comment</comments>
      <pubDate>Tue, 8 Mar 2022 15:51:03 +0900</pubDate>
    </item>
    <item>
      <title>[Python/프로그래머스/Level2/KAKAO] k진수에서 소수 개수 구하기</title>
      <link>https://minnit-develop.tistory.com/31</link>
      <description>&lt;h2 id=&quot;toc-문제&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;양의 정수&amp;nbsp;n이 주어집니다. 이 숫자를&amp;nbsp;k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;0P0처럼 소수 양쪽에 0이 있는 경우&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;P0처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;0P처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;P처럼 소수 양쪽에 아무것도 없는 경우&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단,&amp;nbsp;P는 각 자릿수에 0을 포함하지 않는 소수입니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예를 들어, 101은&amp;nbsp;P가 될 수 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예를 들어, 437674을 3진수로 바꾸면&amp;nbsp;211020101011입니다. 여기서 찾을 수 있는 조건에 맞는 소수는 왼쪽부터 순서대로 211, 2, 11이 있으며, 총 3개입니다. (211, 2, 11을&amp;nbsp;k진법으로 보았을 때가 아닌, 10진법으로 보았을 때 소수여야 한다는 점에 주의합니다.) 211은&amp;nbsp;P0&amp;nbsp;형태에서 찾을 수 있으며, 2는&amp;nbsp;0P0에서, 11은&amp;nbsp;0P에서 찾을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정수&amp;nbsp;n과&amp;nbsp;k가 매개변수로 주어집니다.&amp;nbsp;n을&amp;nbsp;k진수로 바꿨을 때, 변환된 수 안에서 찾을 수 있는&amp;nbsp;&lt;b&gt;위 조건에 맞는 소수&lt;/b&gt;의 개수를 return 하도록 solution 함수를 완성해 주세요.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;toc-제한 사항&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제한 사항&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1 &amp;le;&amp;nbsp;n&amp;nbsp;&amp;le; 1,000,000&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3 &amp;le;&amp;nbsp;k&amp;nbsp;&amp;le; 10&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;toc-입출력 예시&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입출력 예시&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style6&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.0465%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 60.1163%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;k&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 8.72093%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.0465%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;437674&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 60.1163%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 8.72093%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.0465%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;110011&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 60.1163%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;10&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 8.72093%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;toc-나의 풀이&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;나의 풀이&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1646545000657&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def convert(n, q) : // n진수 변환 함수
    rev_base = ''
    while n &amp;gt; 0:
        n, mod = divmod(n, q)
        rev_base += str(mod)
    return rev_base[::-1] 

def getPrimeNum(n): // 소수 찾기 함수
    if n == 1 :
        return False
    elif n == 2 :
        return True
    m = int(n ** 0.5) + 1
    for i in range(2, m):
        if n % i == 0 :
            return False
    return True

def solution(n, k): // K진수에서 소수 개수 구하기 함수
    n = convert(n, k)
    lists = str(n).split('0')
    lists = list(filter(lambda x: x != '', lists))
    lists = list(map(lambda x: getPrimeNum(int(x)), lists))
    return lists.count(True)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; n으로 받은 숫자를 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;k진수로 바꿔주는 과정&lt;/span&gt;이 먼저 필요하다. 그래서 k진수화 시켜주는 함수를&amp;nbsp;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;conver(n, q)&lt;/span&gt;로 제작하였다. 파이썬 함수인&amp;nbsp;&lt;b&gt;divmod&lt;/b&gt;를 이용하였다. divmod는 몫과 나머지를 구해주는 함수이다. 예로 n이 437674였고 k가 3이었다면 변환된 값은 211020101011이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; k진수로 변환한 후에 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;조건에 맞는 소수 개수&lt;/span&gt;를 찾아야한다. 여기서는 4개의 조건을 줬다. 조건을 보면 0을 기준으로 0이 양쪽에 있는지 / 0이 오른쪽에 있는지 / 0이 왼쪽에 있는지 / 0이 하나도 없는지 (물론 소수인 경우일 때)로 나눠지는 것을 알 수 있다. 그렇기 때문에 먼저 0을 기준으로 숫자를 나눠주었다. 여기서 가끔 변수가 있었는데, &lt;u&gt;0이 연속으로 나올 경우에 ''가 배열에 삽입될 수 있다&lt;/u&gt;. 그렇기 때문에 빈 ''값을 제거해주기 위해 &lt;b&gt;filter 고차함수&lt;/b&gt;를 사용하였다. 위의 예로 들어보면 배열은 [211, 2, 1, 1, 11]이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; 이다음에는 이 배열에 있는 숫자들을 소수가 맞는지 아닌지로 판단해주기 위해&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;getPrimeNum(n)&lt;/span&gt;&amp;nbsp;함수를 제작해주었다. 완전 탐색을 이용했다. 여기서 제일 포인트는&amp;nbsp;&lt;b&gt;제곱근까지 검사&lt;/b&gt;를 해주는것이다. 전체 N까지 검사를 해줄 수도 있지만 그러면 시간 초과가 날 수 있다. 제곱근까지만 검사를 해도 충분하다. 배열을 모두 소수인지 판단해준다면 [T, T, F, F, T] 가 나오게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제 이 소수 판별 배열에서&amp;nbsp;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;True 의 개수&lt;/span&gt;를 구해주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;993&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Uapyy/btrvhNiGp8K/5Tcf3VSKqXz7ZGzF9qnCp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Uapyy/btrvhNiGp8K/5Tcf3VSKqXz7ZGzF9qnCp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Uapyy/btrvhNiGp8K/5Tcf3VSKqXz7ZGzF9qnCp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUapyy%2FbtrvhNiGp8K%2F5Tcf3VSKqXz7ZGzF9qnCp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;690&quot; height=&quot;348&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;993&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2022 KAKAO BLIND RECRUITMENT - k진수에서 소수 개수 구하기&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;figure id=&quot;og_1646545339918&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - k진수에서 소수 개수 구하기&quot; data-og-description=&quot;문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92335&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92335&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/yn4GW/hyNC8oeIyk/nl8KgEVFI5oMARKnX5EgPk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/hBW0g/hyNCXUxl6Y/xb4qFgk4lh4hyAYcxTfO5k/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/92335&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92335&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/yn4GW/hyNC8oeIyk/nl8KgEVFI5oMARKnX5EgPk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/hBW0g/hyNCXUxl6Y/xb4qFgk4lh4hyAYcxTfO5k/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - k진수에서 소수 개수 구하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Develop/Algorithm</category>
      <category>Kakao</category>
      <category>KAKAO BLIND RECRUITMENT</category>
      <category>n진수변환</category>
      <category>python</category>
      <category>소수구하기</category>
      <category>진수변환</category>
      <category>카카오코테</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>Minnit</author>
      <guid isPermaLink="true">https://minnit-develop.tistory.com/31</guid>
      <comments>https://minnit-develop.tistory.com/31#entry31comment</comments>
      <pubDate>Sun, 6 Mar 2022 14:44:59 +0900</pubDate>
    </item>
    <item>
      <title>[Python/프로그래머스/Level1/KAKAO] 신고 결과 받기</title>
      <link>https://minnit-develop.tistory.com/30</link>
      <description>&lt;h2 id=&quot;toc-문제&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;문제&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이용자의 ID가 담긴 문자열 배열&amp;nbsp;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;id_list&lt;/span&gt;, 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열&amp;nbsp;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;report&lt;/span&gt;, 정지 기준이 되는 신고 횟수&amp;nbsp;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;k&lt;/span&gt;가 매개변수로 주어질 때, 각 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 return 하도록 solution 함수를 완성해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;toc-입력 형식&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;제한 사항&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2 &amp;le;&amp;nbsp;id_list의 길이 &amp;le; 1,000&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1 &amp;le;&amp;nbsp;id_list의 원소 길이 &amp;le; 10&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;id_list의 원소는 이용자의 id를 나타내는 문자열이며 알파벳 소문자로만 이루어져 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;id_list에는 같은 아이디가 중복해서 들어있지 않습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1 &amp;le;&amp;nbsp;report의 길이 &amp;le; 200,000&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3 &amp;le;&amp;nbsp;report의 원소 길이 &amp;le; 21&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;report의 원소는 &quot;이용자id 신고한id&quot;형태의 문자열입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;예를 들어 &quot;muzi frodo&quot;의 경우 &quot;muzi&quot;가 &quot;frodo&quot;를 신고했다는 의미입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;id는 알파벳 소문자로만 이루어져 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이용자id와 신고한id는 공백(스페이스)하나로 구분되어 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;자기 자신을 신고하는 경우는 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1 &amp;le;&amp;nbsp;k&amp;nbsp;&amp;le; 200,&amp;nbsp;k는 자연수입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;return 하는 배열은&amp;nbsp;id_list에 담긴 id 순서대로 각 유저가 받은 결과 메일 수를 담으면 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;toc-출력 형식&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;입출력 예시&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 52px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;id_list&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;report&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;k&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;result&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 35px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;[&quot;muzi&quot;, &quot;frodo&quot;, &quot;apeach&quot;, &quot;neo&quot;]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 35px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;[&quot;muzi frodo&quot;,&quot;apeach frodo&quot;,&quot;frodo neo&quot;,&quot;muzi neo&quot;,&quot;apeach muzi&quot;]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 35px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%; height: 35px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;[2,1,1,0]&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;[&quot;con&quot;, &quot;ryan&quot;]&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;[&quot;ryan con&quot;, &quot;ryan con&quot;, &quot;ryan con&quot;, &quot;ryan con&quot;]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;[0,0]&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;toc-나의 풀이&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;나의 풀이&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1646377531261&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(id_list, report, k):
    answer = {}
    dictionary = {string : 0 for string in id_list}
    for a in set(report):
        victim, offender = a.split()[0], a.split()[1]
        if answer.get(offender) != None : 
            answer[offender] = answer[offender] + [victim]
        else:
            answer[offender] = [victim]

    for counter in answer.values():
        if len(counter) &amp;gt;= k :
            for t in counter:
                dictionary[t] = dictionary[t] + 1
    
    return list(dictionary.values())&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp; 유저를 victim(신고를 한 유저), offender(신고를 받은 유저)로 구분하였다. offender가 victim들에게 &lt;u&gt;k번 이상 신고를 당하면 정지&lt;/u&gt;를 당하고, &lt;u&gt;내가 신고한 유저(=offender)가 정지를 당하게 된다면 victim들은&amp;nbsp;메일&lt;/u&gt;을 받게된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp; 먼저 report를 for 문으로 돌아주면서 신고자와 신고받은 자를 구분해주었다.&amp;nbsp;&lt;b&gt;먼저 여기 for문에서 report를 set으로 변경 후에 진행해준 이유는, 동일한 유저에 대한 신고 횟수는 1회로 처리되기 때문에 &lt;u&gt;중복을 제거&lt;/u&gt;하기 위함이다&lt;/b&gt;. answer은 dictionary 제작하였다. 그 이유는 key값으로 신고받은 유저(=offender)를 놓고 value값으로 신고한 유저(victim)를 저장하기 위함이다. 만약에 아직 값이 없다면 새로운 값을 넣어주고, 있다면 이미 있는 값에 더해서 넣어준다. 만약 예시 1번에 대해 이렇게 진행했다면&amp;nbsp;answer = {'frodo': ['apeach', 'muzi'], 'muzi': ['apeach'], 'neo': ['muzi', 'frodo']}&amp;nbsp;값이 나오게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp; 이제 신고한 유저가 메일을 받은 횟수를 처리해줘야 한다. 그렇기 때문에 answer 딕셔너리에서 values()를 통해 신고를 한 사람들의 목록을 가져와준다. 이때&amp;nbsp;&lt;b&gt;하나의 키값에 대해 value 배열의 길이가 k보다 크거나 같아야 한다.&lt;/b&gt; 왜냐하면 k번 이상 신고된 유저는 게시판 이용이 정지되기 때문이다. k번 미만으로 신고당했다면 신고를 당했다 하더라도 처리가 되지 않기 때문에 메일이 가지 않게 된다. 그래서 k번 이상인지 검사를 한 후에 그렇다면 처음에 사용자 목록으로 만들어 둔 dictionary의 value값에 +1을 해주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnoZIc/btru4j4j1CM/0ZdKmUjE1L8E2KUnSVebS1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnoZIc/btru4j4j1CM/0ZdKmUjE1L8E2KUnSVebS1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnoZIc/btru4j4j1CM/0ZdKmUjE1L8E2KUnSVebS1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnoZIc%2Fbtru4j4j1CM%2F0ZdKmUjE1L8E2KUnSVebS1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;677&quot; height=&quot;380&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;864&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1646380222784&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 신고 결과 받기&quot; data-og-description=&quot;문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 &quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92334&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92334&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fGMq2/hyNBYzbvw8/Plx4Ycxr6v1G94SEItDPGk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/i6FIb/hyNB3UNi4L/yvX1NSdKsPEVR17rotjRJk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/92334&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/92334&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fGMq2/hyNBYzbvw8/Plx4Ycxr6v1G94SEItDPGk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/i6FIb/hyNB3UNi4L/yvX1NSdKsPEVR17rotjRJk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - 신고 결과 받기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develop/Algorithm</category>
      <category>Kakao</category>
      <category>python</category>
      <category>신고결과받기</category>
      <category>카카오코테</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>Minnit</author>
      <guid isPermaLink="true">https://minnit-develop.tistory.com/30</guid>
      <comments>https://minnit-develop.tistory.com/30#entry30comment</comments>
      <pubDate>Fri, 4 Mar 2022 17:21:47 +0900</pubDate>
    </item>
    <item>
      <title>[Swift/코드한줄] translatesAutoresizingMaskIntoConstraints = false</title>
      <link>https://minnit-develop.tistory.com/29</link>
      <description>&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;하루에 코드 한 줄에 대해 기록합니다. 의식의 흐름을 따라갑니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우리가 코드를 이용해 layout을 잡기 전 꼭 해주는 일이 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;바로 button.translatesAutoresizingMaskIntoConstraints = false&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처럼&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;translatesAutoresizingMaskIntoConstraints 를 false&lt;/span&gt;로 설정해주는 일이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 코드를 설정하지 않으면 위치가 원하는 데로 잡히지 않는다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;왜일지 궁금해졌다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;먼저 translatesAutoresizingMaskIntoConstraints 은 UIView Class 에서 Subviews의 Layout 관련 Property로 분류가 되어있는 것을 볼 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;710&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EDk2g/btrpUHVH3XM/bcdjtxNZkoftY2jlwoVVlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EDk2g/btrpUHVH3XM/bcdjtxNZkoftY2jlwoVVlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EDk2g/btrpUHVH3XM/bcdjtxNZkoftY2jlwoVVlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEDk2g%2FbtrpUHVH3XM%2FbcdjtxNZkoftY2jlwoVVlk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;710&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;710&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고 공식 문서의 정의를 확인해보면&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;View의 AutoresizingMask가 AutoLayout Constraints으로 변환되는지의 Bool값&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이라고 작성되어 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;흠.. 그러면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;AutoresizingMask&lt;/u&gt;가 뭔데?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또 공식 문서를 확인해보면,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;SuperView의 bounds가 변경될 때 그 안에 있는 subView의 크기를 어떻게 재설정해줄 것인가에 대한 bit mask&lt;/u&gt;&amp;nbsp;라고 한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;superView의 위치가 변경되면 subView들은 superView에 상대적으로 완전한 위치/크기가 잡혀있기 때문에 함께 재설정을 해줘야겠지요..?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;근데 ! 나는 ! 자동으로 설정 안 되면 좋겠고 ! 내가 새로 잡은 위치로 개체가 움직이면 좋겠어&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr; &lt;b&gt;기존의 잡아놨던 layout을 위해 상대적으로 이제 그만 움직여줬으면 좋겠어 !&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그쵸 !!? 그렇기 때문에 우리는 AutoresizingMask가 잡히지 않아줬으면 하기 때문에 translatesAutoresizingMaskIntoConstraints 값을 false로 설정해줘야 한다~~ ^-^&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고 translatesAutoresizingMaskIntoConstraints = true 시에는 UIView의 크기, 위치가 완전히 지정되어 있는 상태이기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;false로 변경 후 AutoLayout을 잡아줄 때는 &lt;u&gt;완전한 제약조건&lt;/u&gt;을 제시해야 한다 ~&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아니면 내가 원하는 대로 움직이지 않을지도...!?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;참고로 Code Base로 개체 생성 시에는 translatesAutoresizingMaskIntoConstraints 기본 값이 true로 설정되어 있고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Interface Builder(Storyboard, Xib ..) 로 생성 시에는 translatesAutoresizingMaskIntoConstraints가 false로 설정되어 있다고 한다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스토리보드로 만들어도 맨날 false로 코드 선언해주고 시작했는데 ㅎㅎ 안 그랬어도 됐었네요..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;휴.. 항상 그냥 AutoLayout 잡을 때는 저거 false로 하고 시작해야 해 ~ 라는 단순한 생각에서&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개념을 보고 이해를 하니깐 좋다.. ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2022년 1월 6일 코드한줄&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;끗 -_-&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1641434326446&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apple Developer Documentation&quot; data-og-description=&quot;&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/documentation/uikit/uiview/1622572-translatesautoresizingmaskintoco&quot; data-og-url=&quot;https://developer.apple.com/documentation/uikit/uiview/1622572-translatesautoresizingmaskintoco&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/uikit/uiview/1622572-translatesautoresizingmaskintoco&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/documentation/uikit/uiview/1622572-translatesautoresizingmaskintoco&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Develop/Swift</category>
      <category>apple</category>
      <category>ios</category>
      <category>layout</category>
      <category>SWIFT</category>
      <category>til</category>
      <category>translatesAutoresizingMaskIntoConstraints</category>
      <category>Xcode</category>
      <category>코드한줄</category>
      <author>Minnit</author>
      <guid isPermaLink="true">https://minnit-develop.tistory.com/29</guid>
      <comments>https://minnit-develop.tistory.com/29#entry29comment</comments>
      <pubDate>Sun, 16 Jan 2022 16:48:20 +0900</pubDate>
    </item>
    <item>
      <title>산타마니또  1주년 및 10K 다운로드 기념  </title>
      <link>https://minnit-develop.tistory.com/28</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마니또 게임을 도와주는 아이스브레이킹 앱 산타마니또 !&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제가 처음으로 App Store에 출시한 어플이라 애착이 남다른 산타 마니또가 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;벌써 출시 1주년이 되었다  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2020년 12월 30일에 앱을 올려 벌써 2021년 12월 31일이 되다니..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그동안 잘 커준 산타 마니또를 생각하면..  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실 산타 마니또는 사이드로 동아리 친구들과 진행했던 프로젝트이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기획 1명, 디자이너 1명, 서버 1명, iOS 3명, 안드로이드 1명 총 7명의 대학생들끼리 으쌰 으쌰 만든 앱이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 나는 iOS 리드 개발자로 참여하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;( SOPT라는 IT 창업 동아리인데, 나중에 시간이 된다면 회고를 작성해 보도록 하겠다. )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사이드 프젝이었기 때문에 앱 스토어에 올린 후 꾸준히 들여다보고 업데이트를 하긴 하였지만,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마케팅을 진행하진 않았고, 주변 사람들에게 내가 올린 앱이에요~ 하고 말만 해둔 상태였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 정말 다양한 나이대에서 자주 하는 &quot;마니또&quot;라는 게임이고, 앱 스토어에 다른 경쟁 어플이 많이 없었기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하루에 10~50 사이의 다운로드 수를 꾸준히 기록하고 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고 저번 글에 작성했듯이 3월 말에 1000 다운로드 수를 기록했었다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1640938486650&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;산타마니또  1000 다운로드 기념 앱 업데이트  &quot; data-og-description=&quot;아이스브레이킹 앱 산타 마니또 앱스토어에 출시한지 3-4개월만에 iOS 1000 다운로드 기록 !!!   그 김에 첫 업데이트 도전..! 새 학기를 맞이하면서 약간의 오류도 고치고 환영글을 수정하려고 &quot; data-og-host=&quot;minnit-develop.tistory.com&quot; data-og-source-url=&quot;https://minnit-develop.tistory.com/20&quot; data-og-url=&quot;https://minnit-develop.tistory.com/20&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ny4qA/hyMTHl7QP6/7pPeiV9OtzBsSF8mt8E3S0/img.png?width=800&amp;amp;height=1732&amp;amp;face=0_0_800_1732,https://scrap.kakaocdn.net/dn/nk3et/hyMU5yUPHo/AeM1iWUAFljr5Kjt2o73e1/img.png?width=800&amp;amp;height=1732&amp;amp;face=0_0_800_1732,https://scrap.kakaocdn.net/dn/gYqpo/hyMU8h5x6w/aLr0smspA8wQV8wRKMJnk0/img.png?width=1125&amp;amp;height=2436&amp;amp;face=0_0_1125_2436&quot;&gt;&lt;a href=&quot;https://minnit-develop.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minnit-develop.tistory.com/20&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ny4qA/hyMTHl7QP6/7pPeiV9OtzBsSF8mt8E3S0/img.png?width=800&amp;amp;height=1732&amp;amp;face=0_0_800_1732,https://scrap.kakaocdn.net/dn/nk3et/hyMU5yUPHo/AeM1iWUAFljr5Kjt2o73e1/img.png?width=800&amp;amp;height=1732&amp;amp;face=0_0_800_1732,https://scrap.kakaocdn.net/dn/gYqpo/hyMU8h5x6w/aLr0smspA8wQV8wRKMJnk0/img.png?width=1125&amp;amp;height=2436&amp;amp;face=0_0_1125_2436');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;산타마니또  1000 다운로드 기념 앱 업데이트  &lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;아이스브레이킹 앱 산타 마니또 앱스토어에 출시한지 3-4개월만에 iOS 1000 다운로드 기록 !!!   그 김에 첫 업데이트 도전..! 새 학기를 맞이하면서 약간의 오류도 고치고 환영글을 수정하려고&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;minnit-develop.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실 이때까지만 해도 1000도 너무 큰 숫자여서 행복했고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;매일 다운로드 수를 들여다봤던 거 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고 간간히 올라오는 리뷰들을 보면서 빨리 또 업데이트를 해서 유저들(소수지만..ㅎㅎ)에게 더 많은 기능을 보여주고 싶다는 생각이 많았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시간이 지나 11월이 되면서 다운로드 수가 급속하게 오르기 시작했다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GEGMo/btrpvTu1jAC/fBZLwtEFebgjBatPskPxa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GEGMo/btrpvTu1jAC/fBZLwtEFebgjBatPskPxa1/img.png&quot; data-alt=&quot;갑자기 증가하는 다운로드 수!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GEGMo/btrpvTu1jAC/fBZLwtEFebgjBatPskPxa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGEGMo%2FbtrpvTu1jAC%2FfBZLwtEFebgjBatPskPxa1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;298&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;갑자기 증가하는 다운로드 수!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음에는 &lt;u&gt;왜? 어떤 이유로 다운로드가 증가하지? 어떤 블로그에 우리의 어플이 소개되었나?&lt;/u&gt; 하는 궁금증이 풀리지 않았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다운로드 수가 늘어나면서 11월 12월에는 항상 App Store 소셜 네트워킹 차트 100~50위권 순위를 벗어나지 않았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;매일 아침 일어나 하는 일이 이 순위를 확인하는 거였다 ㅎㅎ..&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;s&gt;( 티스토리 어플 순위도 많이 제쳤는데 크흠 ~ )&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqJrCa/btrpusY3Vad/kO687pMpFs2krwLbVKXTFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqJrCa/btrpusY3Vad/kO687pMpFs2krwLbVKXTFK/img.png&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;2436&quot; data-filename=&quot;IMG_1242.PNG&quot; width=&quot;308&quot; height=&quot;667&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqJrCa/btrpusY3Vad/kO687pMpFs2krwLbVKXTFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqJrCa%2FbtrpusY3Vad%2FkO687pMpFs2krwLbVKXTFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;2436&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DFcbT/btrplhxbdSP/5jLqZZBp0WTjbxwmCyxEIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DFcbT/btrplhxbdSP/5jLqZZBp0WTjbxwmCyxEIk/img.png&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;2436&quot; data-filename=&quot;IMG_1460.PNG&quot; width=&quot;77&quot; height=&quot;167&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DFcbT/btrplhxbdSP/5jLqZZBp0WTjbxwmCyxEIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDFcbT%2FbtrplhxbdSP%2F5jLqZZBp0WTjbxwmCyxEIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;2436&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gmb2g/btrpqySIGXi/eQNxOssckYXRKnKYrYyuU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gmb2g/btrpqySIGXi/eQNxOssckYXRKnKYrYyuU1/img.png&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;2436&quot; data-filename=&quot;IMG_2343.PNG&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gmb2g/btrpqySIGXi/eQNxOssckYXRKnKYrYyuU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGmb2g%2FbtrpqySIGXi%2FeQNxOssckYXRKnKYrYyuU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;2436&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;106 -&amp;gt; ... -&amp;gt; 89 -&amp;gt; ... -&amp;gt; 58위 !&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 바로 다운로드가 높아진 이유는...!!!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;연말이 되면 사람들은 친구들 모임, 회사, 학교 등등 다양한 곳에서 선물 주고받기(a.k.a 마니또)를 하기 때문이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;많은 사람들의 수요 덕분에 우리 마니또 앱의 다운로드 수는 쭉쭉 증가하여&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;결국 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;10K = 10000 다운로드&lt;/b&gt;&lt;/span&gt;를 찍게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정말 너무 기쁜 순간이었고 아직도 다운로드 수를 확인하던 시간이 기억난다 ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-12-31 오후 4.47.01.png&quot; data-origin-width=&quot;2316&quot; data-origin-height=&quot;134&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zbqjk/btrptfZTPka/5IfR5FvmvqTcvoQqmQ3KAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zbqjk/btrptfZTPka/5IfR5FvmvqTcvoQqmQ3KAK/img.png&quot; data-alt=&quot;202년 12월 30일 ~ 2021년 12월 29일까지의 다운로드 횟수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zbqjk/btrptfZTPka/5IfR5FvmvqTcvoQqmQ3KAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzbqjk%2FbtrptfZTPka%2F5IfR5FvmvqTcvoQqmQ3KAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2316&quot; height=&quot;134&quot; data-filename=&quot;스크린샷 2021-12-31 오후 4.47.01.png&quot; data-origin-width=&quot;2316&quot; data-origin-height=&quot;134&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;202년 12월 30일 ~ 2021년 12월 29일까지의 다운로드 횟수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만약 마케팅을 했었다면 더 높은 다운로드를 기록했겠지만,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;학생 신분으로 만든 앱에서 이 정도의 성과가 나왔다는 것은 스스로 박수를 쳐주고 싶다 ~ ㅎㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1년 동안 2번의 작은 버그 업데이트, 1번의 큰 업데이트를 진행하였는데&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2022년에도 한 번 크게 업데이트를 진행할 예정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음에 또 업데이트를 진행하게 된다면, 블로그에 기록으로 남겨보겠다  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그리고 산타 마니또 코드를 업그레이드하면서 어떤 기능들이 있는지 블로그에 소개도 해보고 싶다&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그럼 10K를 자축하며 ~~!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2022년에는 더 블로그를 자주 쓰겠다는 각오와 함께 글을 마친다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕히 계세요 ~~~~ 내년에 봅시다 ~~~  &amp;zwj;♀️&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1640938516053&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;&amp;lrm;산타 마니또 - Santa Manitto&quot; data-og-description=&quot;&amp;lrm;우리 사이 얼음같은 정적을 깨어 줄 마니또 어플, 산타 마니또! 산타 마니또를 통해 우리 모임 아이스브레이킹을 해보세요! 방 만들기,마니또 및 미션 매칭,결과 알림까지 쉽게 할 수 있어요.&quot; data-og-host=&quot;apps.apple.com&quot; data-og-source-url=&quot;https://apps.apple.com/kr/app/%EC%82%B0%ED%83%80-%EB%A7%88%EB%8B%88%EB%98%90-santa-manitto/id1546583360&quot; data-og-url=&quot;https://apps.apple.com/kr/app/%EC%82%B0%ED%83%80-%EB%A7%88%EB%8B%88%EB%98%90-santa-manitto/id1546583360&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/EzrMA/hyMU4UiNGi/Ow4jKQ3onlcokH6VIBNoc1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ch5Kw8/hyMTOlgJ4s/K4ZmMfleRHkHdBegk68Qk1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://apps.apple.com/kr/app/%EC%82%B0%ED%83%80-%EB%A7%88%EB%8B%88%EB%98%90-santa-manitto/id1546583360&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://apps.apple.com/kr/app/%EC%82%B0%ED%83%80-%EB%A7%88%EB%8B%88%EB%98%90-santa-manitto/id1546583360&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/EzrMA/hyMU4UiNGi/Ow4jKQ3onlcokH6VIBNoc1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ch5Kw8/hyMTOlgJ4s/K4ZmMfleRHkHdBegk68Qk1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lrm;산타 마니또 - Santa Manitto&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lrm;우리 사이 얼음같은 정적을 깨어 줄 마니또 어플, 산타 마니또! 산타 마니또를 통해 우리 모임 아이스브레이킹을 해보세요! 방 만들기,마니또 및 미션 매칭,결과 알림까지 쉽게 할 수 있어요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;apps.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Just/활 동</category>
      <category>10K</category>
      <category>SOPT</category>
      <category>마니또</category>
      <category>사이드프로젝트</category>
      <category>산타마니또</category>
      <author>Minnit</author>
      <guid isPermaLink="true">https://minnit-develop.tistory.com/28</guid>
      <comments>https://minnit-develop.tistory.com/28#entry28comment</comments>
      <pubDate>Fri, 31 Dec 2021 17:18:46 +0900</pubDate>
    </item>
  </channel>
</rss>