Swift中如何向Eventos类的Evento对象数组添加元素
Swift新手求助:如何将Evento对象添加到Eventos类的数组中?
问题背景
我是Swift新手,这是我的第一份Swift代码。我已经定义了Evento类用于创建事件对象,代码能正常运行;接着写了Eventos类用来存储Evento对象,但不知道怎么把已创建的Evento实例添加到Eventos的数组里。
我的Evento类代码
import Foundation class Evento { let indice: Int? let nombre: String let estado: Estado let precio: Double? let imagenes: [String]? let descipcion: String let urlWeb: String? let urlRRSS: [String]? let empresa: String? let email: String let telefono: String let direccion: String let fecha: String let lat, lon: Double? let tags: [String] init(nombre: String, estado: Estado, descipcion: String, precio: Double? ,email: String, telefono: String, direccion: String, fecha: String, tags: [String]) { self.indice = nil self.nombre = nombre self.estado = Estado.nopublicado self.precio = precio self.imagenes = [] self.descipcion = descipcion self.urlWeb = nil self.urlRRSS = nil self.empresa = nil self.email = email self.telefono = telefono self.direccion = direccion self.fecha = fecha self.lat = nil self.lon = nil self.tags = tags } init(indice: Int?, nombre: String, estado: Estado, precio: Double?, imagenes: [String]?, descipcion: String, urlWeb: String?, urRRSS: [String]?, empresa: String, email: String, telefono: String, direccion: String, fecha: String, lat: Double?, lon: Double?, tags: [String]) { self.indice = indice self.nombre = nombre self.estado = Estado.nopublicado self.precio = precio self.imagenes = [] self.descipcion = descipcion self.urlWeb = "" self.urlRRSS = [] self.empresa = empresa self.email = email self.telefono = telefono self.direccion = direccion self.fecha = fecha self.lat = 0.0 self.lon = 0.0 self.tags = tags } enum Estado{ case nopublicado, activo, retrasado, candelado,terminado } func publicarEventoInfoBasica(nombre: String, descripcion: String, fecha: String){ print("Información sobre el evento: \(nombre) que se celebrará el \(fecha))") } func precioEventoDescuento(descuento: Double, precio: Double)-> Double{ var precioReal = 0.0 precioReal = descuento * precio return precioReal } }
我的Eventos类代码
import Foundation class Eventos { var eventos:[Evento] = [] }
主程序的问题代码片段
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let evento1 = Evento(nombre: "Fiesta bienvenida UCAM", estado: .activo, descipcion: "Fiesta inicio del curso para toda la comunidad educativa de la UCAM", precio:24.50, email: "secretaria@ucam.es", telefono: "69685474", direccion: "Universidad San Antonio", fecha: "11/10/2022", tags: ["UCAM","FIESTA","BIENVENIDA"]) let evento2 = Evento(nombre: "Fiesta navidad", estado: .nopublicado, descipcion: "Fiesta del nacimiento de Nuestro Señor Jesús", precio:0.0, email: "iglesiasananton@ucam.es", telefono: "965452123", direccion: "Iglesia San Antón", fecha: "25/12/2022", tags: ["NAVIDAD","FIESTA"]) // 此处写法错误,不知道怎么填充数组 var eventosPendientes = Eventos() eventosPendientes = [evento1 , evento2] // 示例方法调用 let precioReal = evento1.precioEventoDescuento(descuento: 0.5, precio: evento1.precio ?? 0.0) print("Recuerda que el próximo \(evento1.fecha) se celebra el evento de \(evento1.nombre) al que todos los alumnos estan invitados") print("El precio es gratuito para los estudiantes pero si traes a algun acompañante deberás pagar \(evento1.precio)€ por acompañante") print ("Al primer acompañante se le aplicará un descuento del 50% por lo que tendra que pagar:\(precioReal) ") } }
解决方案
你当前的错误是试图把[Evento]数组直接赋值给Eventos实例——这两个类型不匹配,正确的做法是操作Eventos类里的eventos数组属性,以下是几种可行方法:
方式1:直接给数组赋值
创建Eventos实例后,直接将evento1和evento2组成的数组赋值给它的eventos属性:
var eventosPendientes = Eventos() eventosPendientes.eventos = [evento1, evento2]
方式2:逐个添加元素
用数组的append方法逐个添加单个Evento对象:
var eventosPendientes = Eventos() eventosPendientes.eventos.append(evento1) eventosPendientes.eventos.append(evento2)
如果要一次性添加多个元素,可以用append(contentsOf:):
eventosPendientes.eventos.append(contentsOf: [evento1, evento2])
方式3:给Eventos类添加便捷方法(推荐)
为了让Eventos类的使用更符合面向对象设计,可以给它添加专门的添加事件方法:
class Eventos { var eventos:[Evento] = [] // 添加单个事件 func agregarEvento(_ evento: Evento) { eventos.append(evento) } // 添加多个事件 func agregarEventos(_ nuevosEventos: [Evento]) { eventos.append(contentsOf: nuevosEventos) } }
之后在ViewController里可以这样调用:
var eventosPendientes = Eventos() eventosPendientes.agregarEvento(evento1) eventosPendientes.agregarEvento(evento2) // 或者一次性添加多个 // eventosPendientes.agregarEventos([evento1, evento2])
额外小提示
你的Evento类里有两个拼写错误:descipcion应该是descripcion,第二个初始化方法里的urRRSS应该是urlRRSS,建议修正以避免后续潜在问题。
内容的提问来源于stack exchange,提问作者Monrac
相关产品推荐
相关产品推荐

