Как поместить UILabel и UIImage в метод класса

#swift #xcode

Вопрос:

  import UIKit class ViewController: UIViewController {      @IBOutlet weak var nameLabel: UILabel!  @IBOutlet weak var chargeLabel: UILabel!  @IBOutlet weak var bigDogLabel: UILabel!  @IBOutlet weak var cafeImageView: UIImageView!      override func viewDidLoad() {  }        struct DogCafe{  var name: String  var charge: Int  var bigDog: Bool  var cafeImage: UIImage      init(name: String, charge: Int, bigDog: Bool, cafeImage: UIImage) {  self.name = name  self.charge = charge  self.cafeImage = cafeImage  self.bigDog = bigDog  }        func message() {  nameLabel.text = "카페 (name) 입니다"  chargeLabel.text = "입장료는 (charge) 입니다"  cafeImageView.image = cafeImage  if bigDog == true {  bigDogLabel.text = "대형견 출입이 가능한 매장입니다"  } else {  bigDogLabel.text = "대형견 출입이 불가능한 매장입니다"  }  }  }          @IBAction func ohdodokButton(_ sender: UIButton) {  let dogCafe = DogCafe(name: "카페 오도독", charge: 3500, bigDog: true, cafeImage: #imageLiteral(resourceName: "ohdodok"))  dogCafe.message()  }        @IBAction func meltingButton(_ sender: UIButton) {  let dogCafe2 = DogCafe(name: "멜팅", charge: 5000, bigDog: false, cafeImage: #imageLiteral(resourceName: "melting"))  dogCafe2.message()  }           }  
 func message() {  nameLabel.text = "카페 (name) 입니다"  chargeLabel.text = "입장료는 (charge) 입니다"  cafeImageView.image = cafeImage  if bigDog == true {  bigDogLabel.text = "대형견 출입이 가능한 매장입니다"  } else {  bigDogLabel.text = "대형견 출입이 불가능한 매장입니다"  }  

Элемент экземпляра «Метка имени» типа «ViewController» не может использоваться на экземпляре вложенного типа » ViewController.СобАчье кафе’

Элемент экземпляра «chargeLabel» типа «ViewController» не может использоваться на экземпляре вложенного типа » ViewController.СобАчье кафе’

Элемент экземпляра «cafeImageView» типа «ViewController» не может использоваться на экземпляре вложенного типа » ViewController.СобАчье кафе’

Элемент экземпляра «bigDogLabel» типа «ViewController» не может использоваться на экземпляре вложенного типа » ViewController.СобАчье кафе’

Ответ №1:

вы можете использовать, как показано ниже

 @IBAction func ohdodokButton(_ sender: UIButton) {  let dogCafe = DogCafe(name: "카페 오도독", charge: 3500, bigDog: true, cafeImage: #imageLiteral(resourceName: "ohdodok"))  setCurrentDogAttributes(currentDog: dogCafe) }  @IBAction func meltingButton(_ sender: UIButton) {  let dogCafe2 = DogCafe(name: "멜팅", charge: 5000, bigDog: false, cafeImage: #imageLiteral(resourceName: "melting"))  setCurrentDogAttributes(currentDog: dogCafe) }   func setCurrentDogAttributes(currentDog:DogCafe){  nameLabel.text=currentDog.name  //Set your Values Here }  

Комментарии:

1. Я решил эту проблему. Спасибо. : )

2. Предварительное голосование является необязательным и зависит от усмотрения избирателя. Кроме того, у ОП еще недостаточно репутации, чтобы проголосовать.

Ответ №2:

Ваш подход неверен. Вам нужно прочитать о разделении забот. Я бы также предложил ознакомиться с шаблоном проектирования MVC (контроллер представления модели), который является довольно распространенным способом разработки на iOS.

В вашем коде DogCafe является объектом модели. Он содержит данные, которыми вы хотите управлять и отображать в своем приложении.

Объект модели не должен ничего знать о том, как он используется. Он просто хранит данные.

Ваш контроллер представления должен взять объект модели и отобразить его в своих представлениях. Один из способов справиться с этим — добавить display(cafe:) метод в контроллер представления:

 class ViewController: UIViewController {   // The rest of your view controller variables and functions would go here...   func display(cafe: DogCafe) {  nameLabel.text = "카페 (cafe.name) 입니다"  chargeLabel.text = "입장료는 (cafe.charge) 입니다"  cafeImageView.image = cafe.cafeImage  if cafe.bigDog == true {  bigDogLabel.text = "대형견 출입이 가능한 매장입니다"  } else {  bigDogLabel.text = "대형견 출입이 불가능한 매장입니다"  }  } }  

Комментарии:

1. Спасибо, что сказали мне, в чем дело. : )