Как сделать кнопку, которая будет печатать слова, когда я ее нажму

#ios #swift #swift-playground #ipad-playgrounds

Вопрос:

Я хочу создать игру «Правда или вызов» в swift playground для iPad, но я не могу создать кнопку, которая печатала бы более одного вызова или правды. Я попытался создать var, в котором есть все dare, а затем я поместил его в (объект NSObject ответчика класса), var выглядит так( var dare = [«dare 1», «dare 2″…]), но он выдает мне ошибку, в которой говорится (не удается присвоить значение типа «[Строка]» типу «Строка»), и 2-я вещь, которую я попытался (пусть dare = [«dare 1», «dare 2″…]), которая дала мне ту же ошибку. мой код выглядит так

 
import PlaygroundSupport
import UIKit

let View = UIView()
View.backgroundColor = .blue
let lbl = UILabel(frame: CGRect(x: 210, y: 329, width: 200, height: 50))
lbl.text = "hi!"
View.addSubview(lbl)
lbl.textColor = .white


let button = UIButton(frame: CGRect(x: 67, y: 500, width: 100, height: 50))
button.backgroundColor = .green
button.setTitle("button", for: UIControl.State.selected)
button.layer.cornerRadius = 10
View.addSubview(button)

let button1 = UIButton(frame: CGRect(x: 300, y: 500, width: 100, height: 50))
button1.backgroundColor = .red
button1.setTitle("button1", for: UIControl.State.selected)
button1.layer.cornerRadius = 10
View.addSubview(button1)

class Responser: NSObject

{
    //Method to be called

    @objc func printname()

    {
        lbl.text = "1"

    }

}

let responder = Responser()
button.addTarget(responder, action: #selector(Responser.printname), for:.touchUpInside)  

class Responser1: NSObject

{
    //Method to be called

    @objc func printname()
    {
        lbl.text = "2"
    }

}

let responder1 = Responser1()
button1.addTarget(responder1, action: #selector(Responser1.printname), for:.touchUpInside)
PlaygroundPage.current.liveView = View

 

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

1. Хотя вы находитесь на игровой площадке, могу ли я предложить вам немного поиграть с размещением ваших представлений и переменных в структурах или классах? Это может уже навести кое-какие порядки для вас?

2. Сообщение об ошибке сообщает вам, что вы назначаете массив типа String, в то время как ожидается, что он получит только одну строку. Откуда у вас эта ошибка? Не удается найти dares массив в вашем коде. Еще один вопрос: почему вы создали два разных Responder класса ?

3. Я создал два ответчика для двух кнопок.

4. Вы могли бы создать другой метод в том же классе или, если это возможно, добавить аргумент к printName методу и передать то, что вы хотите распечатать. Это было бы намного эффективнее. @Иво

5. Ошибка появляется на этикетке.text = смеет ‘’ var смеет = [«смеет 1», «смеет 2», «смеет 3»]‘’. ‘’ ответчик класса: NSObject { @objc функция printname() { lbl.text = смеет } } ‘’