• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

5번째 프로젝트 질문입니다

20.05.15 02:50 작성 조회수 76

0

5번째 프로젝트에서요

다른 코드는 괜찮은데, mainViewController에서 오류가 있습니다.

마지막 부분 decode인데요.

"Cannot invoke 'decode' with an argument list of type '(@escaping (main.ButtonTag) -> AnimalInfo?, from: Data)'"

이러한 말이 뜹니다. 어떻게 해결해야하나요?

//  main.swift
//  What's This?
//
//  Created by Tae-hee on 2020-05-11.
//  Copyright © 2020 Tae-hee. All rights reserved.
//

import UIKit

class main: UIViewController {
   
    //MARK: - Nested Type
    private enum ButtonTag: Int {
        case dog = 101
        case cat, rabbit, hedgehog
    }

    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
        guard let button: UIButton = sender as? UIButton else { return }
           
        guard let nextViewController: game = segue.destination as? game else
                {return}
           
        guard let tag: ButtonTag = ButtonTag(rawValue: button.tag) else {
            print("버트의 태그를 enum 변경불가")
            return
        }
           
        guard let info: AnimalInfo = self.AnimalInfo(for: tag) else { return }
           
        nextViewController.AnimalInfo = info
        }
   
       //MARK: Privates
   private func AnimalInfo(for tag: ButtonTag) -> AnimalInfo? {
      
       let assetName: String
      
       switch tag {
       case ButtonTag.dog:
           assetName = "Dog"
       case ButtonTag.cat:
           assetName = "Cat"
       case ButtonTag.rabbit:
           assetName = "Rabbit"
       case ButtonTag.hedgehog:
           assetName = "Hedgehog"
       }
      
    return self.decodeAnimalInfo(from: assetName)
   }
  
    private func decodeAnimalInfo(from assetName: String) -> AnimalInfo? {
        guard let asset: NSDataAsset = NSDataAsset(name: assetName) else {
            print("에셋 로드 실패")
            return nil
        }
       
        do {
            let decoder: PropertyListDecoder = PropertyListDecoder()
            return try decoder.decode(AnimalInfo.self, from: asset.data)
        } catch {
            print("데이터 디코딩 실패")
            print(error.localizedDescription)
            return nil
        }
    }
}

답변 0

답변을 작성해보세요.

답변을 기다리고 있는 질문이에요.
첫번째 답변을 남겨보세요!