Не удается присвоить значение типа 'String.Type' типу 'String?' - Свифт - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь заполнить свой tableView данными из массива, однако, когда я пытаюсь присвоить текст ячейки элементам в массиве, я получаю сообщение об ошибке:

Не удается присвоить значение типа 'String.Type' типу 'String?

Вот мой код в его нынешнем виде, я пробовал несколько других способов, но кажется, что он самый близкий.

class ContactViewController: UIViewController, UITableViewDataSource {

  var contact:[Contacts]=[]

  struct Contacts {
     let name = String.self;
  }

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
        let contacts = contact[indexPath.row]
        cell.textLabel?.text = contacts.name //This is where I get the error
        return cell
   }
}

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Когда вы пишете «=», вы присваиваете значение, поэтому при написании

let name = String.self

вы назначаете тип String для name. Если вы хотите объявить тип переменной, вы должны использовать точку с запятой;

struct Contact {
  var name: String
}

Если вы хотите быстро заполнить ваш массив данными только для тестирования, вы можете написать:

struct Contact {
    var name: String
}

class ContactViewController: UIViewController, UITableViewDataSource {

  var contacts = [
      Contact(name: "First Contact"),
      Contact(name: "Second Contact"),
      Contact(name: "Third Contact")
  ]

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
        let contact = contacts[indexPath.row]
        cell.textLabel?.text = contact.name //This is where I get the error
        return cell
   }
}
0 голосов
/ 14 мая 2019

Вы не показываете, как вы заполняете массив Contacts, но структура не объявлена ​​правильно.

Предположительно, вам нужна структура, которая содержит имя в виде строки. Это будет объявлено как: -

struct Contacts
{
  let name : String
}

Или с name, объявленным с var вместо let, если оно должно быть переменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...