Reputation:
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
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