#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. Спасибо, что сказали мне, в чем дело. : )