不能将[Struct]类型的值转换为强制swift中的[string]类型

时间:2021-09-18 15:21:05

I got this error:

我收到了这个错误:

cannot convert value of type [Destinos] to type [String] in coercion swift

不能将[Destinos]类型的值转换为强制swift中的[String]类型

I have this Struct:

我有这个结构:

public struct Destinos: Data { public var idDestino : Int? public var desDestino : String? }

public struct Destinos:Data {public var idDestino:Int? public var desDestino:String? }

and this:

var listado = [Destinos]() listado.append(Destinos(idDestino: 1, desDestino: "Asunción")) listado.append(Destinos(idDestino: 2, desDestino: "Miami"))

var listado = [Destinos]()listado.append(Destinos(idDestino:1,desDestino:“Asunción”))listado.append(Destinos(idDestino:2,desDestino:“Miami”))

then:

var ListaDeDestinos = [String]()

so my error appears in this line:

所以我的错误出现在这一行:

ListaDeDestinos = DestinoLista.listado as [String]

What is wrong here? can help me please? i´m don´t find anything like this in the forums

这有什么不对?可以帮帮我吗?我在论坛里找不到这样的东西

Edit all my code:

编辑我的所有代码:

import UIKit

class Api {

Api级{

let Presentador: DestinoPresenter! // referenciamos la clase DestinoPresenter en una variable local

init(Present: DestinoPresenter){ // constuctor: inicializamos la variable Presentador y creamos una copia de la clase DestinoPresenter
    Presentador = Present
}

var listado = [Destinos]()


func GetDestinos(){


    listado.append(Destinos(idDestino: 1, desDestino: "Asunción"))
    listado.append(Destinos(idDestino: 2, desDestino: "Miami"))


    print(listado)

}

}

class DestinoPresenter {

class DestinoPresenter {

let mview: ViewController // referenciamos la clase DestinoPresenter en una variable local

init(view: ViewController) { //construnctor
    mview = view
}

var ArrayAutoComplete = [String]()
var ListaDeDestinos = [String]()
fileprivate var DestinoLista: Api!


func searchDestinos(_ substring: String) {

    ArrayAutoComplete.removeAll() //cada vez que llamemos a esta funcion, limpiamos la variable ArrayAutoComplete del TableView

    DestinoLista = Api(Present: self)
    DestinoLista.GetDestinos()

// ListaDeDestinos = [(DestinoLista.listado as AnyObject) as! String] ListaDeDestinos = DestinoLista.listado as [String]

// ListaDeDestinos = [(DestinoLista.listado as AnyObject)as! String] ListaDeDestinos = DestinoLista.listado as [String]

    for key in ListaDeDestinos {

        let myString:NSString! = key as NSString

        if (myString.lowercased.contains(substring.lowercased())) {
            print(myString.contains(myString as String) ? "yep" : "nope")
            ArrayAutoComplete.append(key)

        }
    }

    mview.mostarResultados(ArrayResultados: ArrayAutoComplete) //llamamos a la función y le pasamos como parametro ArrayAutoComplete

}

}

class ViewController: UIViewController {

class ViewController:UIViewController {

@IBOutlet weak var textField: UITextField! = nil
@IBOutlet weak var tableView: UITableView! = nil

var autoCompleteDestino: [String] = []

fileprivate var DestinoP: DestinoPresenter!

override func viewDidLoad() {
    super.viewDidLoad()

    //LEER: pasando como referencia tu vista
    DestinoP = DestinoPresenter(view: self)


    title = "Texto predecible"

// DestinoP.getDestinos() // DestinoP.ListarDestinos()

// DestinoP.getDestinos()// DestinoP.ListarDestinos()

}
func mostarResultados(ArrayResultados: [String]) {

    autoCompleteDestino = ArrayResultados
    tableView.reloadData()

}

}

extension ViewController: UITextFieldDelegate {

扩展ViewController:UITextFieldDelegate {

public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    let substring = (textField.text! as NSString).replacingCharacters(in: range, with: string)

    DestinoP.searchDestinos(substring)

    return true

}

}

extension ViewController: UITableViewDataSource { // Completa el string encontrado en el tableView segun caracter ingresado en el textField public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as UITableViewCell let index = indexPath.row as Int

扩展ViewController:UITableViewDataSource {// Completa el string encontrado en el tableView segun caracter ingresado en el textField public func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath) - > UITableViewCell {let cell = tableView.dequeueReusableCell(withIdentifier:“cell” ,for:indexPath)as UITableViewCell让index = indexPath.row作为Int

    cell.textLabel!.text = autoCompleteDestino[index]

    return cell
}

}

extension ViewController: UITableViewDelegate {

扩展ViewController:UITableViewDelegate {

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return autoCompleteDestino.count

}
//    selecciona el resultado desde el tableView para completar en el textField.
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let selectedCell: UITableViewCell = tableView.cellForRow(at: indexPath)!

    textField.text = selectedCell.textLabel!.text!

}

}

2 个解决方案

#1


1  

If you wanted the string member variable of each listados object, do:

如果您想要每个listados对象的字符串成员变量,请执行以下操作:

for object in DestinoLista.listados {
    ListaDeDestinos.append(object.desDestino)
}

#2


1  

It's not clear what you want "the string version of Destinos" to be. If you don't really care, and just want "something usable for debugging," then map it to String(describing:):

目前尚不清楚你想要的是“Destinos的字符串版本”。如果你真的不在乎,只想要“可用于调试的东西”,那么将它映射到String(描述:):

let listaDeDestinos = listado.map(String.init(describing:))

#1


1  

If you wanted the string member variable of each listados object, do:

如果您想要每个listados对象的字符串成员变量,请执行以下操作:

for object in DestinoLista.listados {
    ListaDeDestinos.append(object.desDestino)
}

#2


1  

It's not clear what you want "the string version of Destinos" to be. If you don't really care, and just want "something usable for debugging," then map it to String(describing:):

目前尚不清楚你想要的是“Destinos的字符串版本”。如果你真的不在乎,只想要“可用于调试的东西”,那么将它映射到String(描述:):

let listaDeDestinos = listado.map(String.init(describing:))