2016-07-10 2 views
-1

쉬운 예제를 만들고 있습니다. func : filterByYear를 사용하여 연도별로 영화를 필터링하려고합니다. 나는 바닥에 한 줄에 오류가 있습니다 'VAR filterYear = MovieArchive.filterByYear (1980)'컴파일러 정보는 다음과 같습니다 '유형'MovieArchive년별 필터링 방법 호출 방법

import UIKit 

class Movie { 
    let title: String 
    let director: String 
    let releaseYear: Int 


    init(title: String, director: String, releaseYear: Int){ 
     self.title = title 
     self.director = director 
     self.releaseYear = releaseYear 
    } 
} 

class MovieArchive{ 
    var movies : [Movie] 
    init(movies:[Movie]){ 
     self.movies = movies 

    func filterByYear(year:Int) -> [Movie]{ 
     var filteredArray = [Movie]() 
     for movie in movies{ 
      if movie.releaseYear == year { 
       filteredArray.append(movie) 
      } 
     } 
     return filteredArray 
    } 
    } 
} 


var newMovie1 = Movie(title: "IT", director: "S.S", releaseYear: 1980) 
var newMovie2 = Movie(title: "PP", director: "O.N", releaseYear: 2003) 
var moviesArray = [newMovie1, newMovie2] 

var myArchive = MovieArchive(movies: moviesArray) 
var filterYear = MovieArchive.filterByYear(1980) 
var firstMovie = filterYear[0] 
print(firstMovie) 
+0

먼저 당신의 'filterByYear' 메쏘드는'init' 안에 중첩되어 있습니다 - 당신은 그것을 호출하기 위해 메인 클래스 몸체에 가져와야합니다. 마지막으로'filterByYear' 메소드를'returns movies.filter {$ 0.releaseYear == year}'로 단순화 할 수 있습니다. 나 또한 도울 수 없지만 참조 구조가 정말로 필요한 경우가 아니면 구조체를 사용해야한다고 생각합니다. – Hamish

답변

1

당신은 메소드를 호출하지 않습니다 '에는 멤버 filterByYear있다'는 그 자체가 아니라 클래스 자체에.

let myMovieArchive = MovieArchive(movies: [ 일부 배열 ])

을 다음 인스턴스 메소드를 호출 :이 같은 클래스의 인스턴스를 생성해야합니다.

print(myMovieArchive.filterByYear)

따라서 귀하의 경우, myArchive하지 MovieArchive에 문의하십시오. 질문에 대한 답변이되었지만

-1

, 당신은 좀 더 스위프 티 확인하기 위해 filterByYear 방법을 단순화 할 수 있습니다 : 둘째,`당신`myArchive.filterByYear (1980)를 의미 모든

func filterByYear(year:Int) -> [Movie] 
{ 
    return movies.filter({ $0.releaseYear == year }) 
}