You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:31:11