user8087155
user8087155

Reputation:

Type '[Class]?' has no member '[Variable]'

I am trying to build a movie archive app for iOS. But i am getting this error when i try to use my class which i defined in another controller.

Type 'Movie?' has no member 'name'


I have 4 Controller files;


and 2 .swift files;

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 = ""
  }
}


I can reach my class when I use movieListVC like it should be.


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 doesn't give any error for my movieListVC, but when i use same thing in movieDetailVC, it gives me the error.


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
}



Edit 1: I also use movieToShow in here for information:

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

        viewController.movieToShow = self.selectedMovie
    }
}

Upvotes: 1

Views: 509

Answers (1)

PGDev
PGDev

Reputation: 24341

In the movieDetailVC,

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

In the above line, you have used an extra . after name. Remove that.

Upvotes: 1

Related Questions