Тип "[Класс]?"не имеет члена '[Variable]' - PullRequest
0 голосов
/ 26 октября 2018

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

Тип 'Movie?'У меня нет имени участника


У меня есть 4 файла контроллера;

  • movieListVC
  • movieDetailVC
  • movieAddVC


и 2 файла .swift;

  • Файл
  • Фильм (это файл, который я определил для своего класса)

Movie.swift:

class Movie: NSObject {
  var name : String
  var director : String
  var year : String
  var posterURL : String

  override init(){
      self.name = ""
      self.director = ""
      self.year = ""
      self.posterURL = ""
  }
}


Я могу достичь своего класса, когда я использую movieListVC, как и должно быть.


movieListVC:

var selectedMovie : Movie?

            .
            .
            .

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  self.selectedMovie = Movie()
  let temp = self.movies[indexPath.row] as! Dictionary<String, AnyObject>

  selectedMovie!.name = temp["name"]! as! String
  selectedMovie!.director = temp["director"] as! String
  selectedMovie!.year = temp["year"] as! String
  selectedMovie!.posterURL = temp["posterURL"] as! String

  self.performSegue(withIdentifier: "detail", sender: self)

  let movieName = temp["name"] as! String
  print("Name of the selected movie: \(movieName)")
}


Xcode не выдает никакой ошибки для моего movieListVC, но когда я использую ту же вещь в movieDetailVC, он выдает мне ошибку.


movieDetailVC:

var movieToShow : Movie?                             // Expected member name or constructor call after type name
            .
            .
            .
 override func viewDidLoad() {
   super.viewDidLoad()
   if (self.movieToShow == nil) {
       return;
   }

   labelMovieName.text = movieToShow!.name           // Type 'Movie?' has no member 'name'
   labelMovieDirector.text = movieToShow!.director   // Type 'Movie?' has no member 'name'
   labelMovieYear.text = movieToShow!.year           // Type 'Movie?' has no member 'name'
   let image = UIImage(data: try! Data(contentsOf: 
             URL(string: movieToShow!.posterURL)))   // Type 'Movie?' has no member 'name'
   imageViewPoster.image = image
}



Редактировать 1: я также использую movieToShow здесь для информации:

override func prepare(for segue: UIStoryboardSegue?, sender: Any!) {
    if segue!.identifier == "detail" {
        let viewController:movieDetailViewController = segue!.destination as! movieDetailViewController

        viewController.movieToShow = self.selectedMovie
    }
}

1 Ответ

0 голосов
/ 26 октября 2018

В movieDetailVC,

labelMovieName.text = movieToShow!.name.          // Type 'Movie?' has no member 'name'

В приведенной выше строке вы использовали дополнительные . после name.Удалить это.

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