我得到这个错误:
无法在强制swift中将类型[Destinos]的值转换为类型[String]
我有这个结构:
public struct Destinos: Data { public var idDestino : Int? public var desDestino : String?}
而这个:
var listado = [Destinos]()listado.append(Destinos(idDestino: 1, desDestino: "Asunción"))listado.append(Destinos(idDestino: 2, desDestino: "Miami"))
然后:

var ListaDeDestinos = [String]()

所以我的错误出现在这一行:
ListaDeDestinos = DestinoLista.listado as [String]

这里怎么了?能帮我个忙吗?我在论坛上找不到这样的东西
编辑
我所有的代码:
import UIKit

类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)

}

}
类目标呈现程序{
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()

//listaDestinos=[(DestinoLista.listado作为任何对象)作为!字符串]
listaDestinos=DestinoLista.listado作为[字符串]
    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

}

}
类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()
}
func mostarResultados(ArrayResultados: [String]) {

    autoCompleteDestino = ArrayResultados
    tableView.reloadData()

}

}
扩展视图控制器: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

}

}
扩展视图控制器:UITableViewDataSource{
//完成el string encontrado en el tableView segun character ingresado en el textField
public func tableView(u tableView:UITableView,cellForRowAt indexPath:indexPath)->UITableViewCell{
设cell=tableView.dequeueReusableCell(带标识符:“cell”,for:indexPath)为UITableViewCell
将index=indexPath.row设为Int
    cell.textLabel!.text = autoCompleteDestino[index]

    return cell
}

}
扩展视图控制器: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!

}

}

最佳答案

如果需要每个listados对象的string成员变量,请执行以下操作:

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

关于arrays - 无法在强制转换中将[Struct]类型的值转换为[string]类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44551725/

10-08 22:43