【发布时间】:2015-11-16 17:27:52
【问题描述】:
我有一个包含匹配列表的League 类。我想将这些匹配填充到 pageViewController 中。但是我不断收到以下错误:
Cannot invoke 'indexOf' with argument list of type (match)。我想这是因为items 属于联盟类型。但是我设置了['matches']所以不应该填充所有匹配项吗?那为什么我不能 indexOf 以及为什么它的类型不匹配?
变量
var items: Results<League>?
领域模型
class League:Object {
dynamic var id: Int = 0
dynamic var name: String? = ""
var matches = List<Match>()
override class func primaryKey() -> String {
return "id"
}
}
class Match:Object {
dynamic var matchId: Int = 0
dynamic var date: NSDate = NSDate()
dynamic var homeName: String? = ""
dynamic var awayName: String? = ""
dynamic var homeAcro: String? = ""
dynamic var awayAcro: String? = ""
dynamic var awayScore: Int = 0
dynamic var homeScore: Int = 0
dynamic var leagueName: String? = ""
dynamic var homeLogo: NSData = NSData()
dynamic var awayLogo: NSData = NSData()
override class func primaryKey() -> String {
return "matchId"
}
}
pageViewController 委托方法
extension ViewController: UIPageViewControllerDataSource {
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let currentText = (viewController as! ScoreViewController).match
var currentIndex = items!["matches"].indexOf(currentText!)
if currentIndex == items!["matches"].count - 1 {
return viewControllerAtIndex(0)
} else {
return viewControllerAtIndex(++currentIndex!)
}
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
let currentText = (viewController as! ScoreViewController).match
var currentIndex = items!.indexOf(currentText!)
if currentIndex == 0 {
return viewControllerAtIndex(items!["matches"].count - 1)
} else {
return viewControllerAtIndex(--currentIndex!)
}
}
func viewControllerAtIndex(index: Int) -> UIViewController {
let contentViewController = storyboard?.instantiateViewControllerWithIdentifier("ScoreViewController") as! ScoreViewController
contentViewController.match = self.items!["matches"][index]
return contentViewController
}
}
项目已初始化
for (_, item) in result {
if let leagueId = item["league"].int,
let leagueName = item["name"].string,
let allMatches = item["matches"].array {
let leagueObject = League()
leagueObject.name = leagueName
leagueObject.id = leagueId
for match in allMatches {
if let matchId = match["matchId"].int,
let tournament = match["tournament"].string,
let homeTeam = match["homeName"].string,
let awayTeam = match["awayName"].string,
let homeScore = match["homeScore"].int,
let awayScore = match["awayScore"].int,
let homeLogo = match["homeLogo"].string,
let awayLogo = match["awayLogo"].string,
let date = match["date"].string,
let homeAcro = match["homeAcro"].string,
let awayAcro = match["awayAcro"].string{
if let awayLogoUrl = NSURL(string: awayLogo),
let homeLogoUrl = NSURL(string: homeLogo) {
if let awayLogoData = NSData(contentsOfURL: awayLogoUrl),
let homeLogoData = NSData(contentsOfURL: homeLogoUrl) {
let matchObject = Match()
matchObject.matchId = matchId
matchObject.leagueName = tournament
matchObject.homeName = homeTeam
matchObject.awayName = awayTeam
matchObject.homeScore = homeScore
matchObject.awayScore = awayScore
matchObject.homeLogo = homeLogoData
matchObject.awayLogo = awayLogoData
matchObject.homeAcro = homeAcro
matchObject.awayAcro = awayAcro
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
formatter.timeZone = NSTimeZone(abbreviation: "CET")
matchObject.date = formatter.dateFromString(date)!
leagueObject.matches.append(matchObject)
}
}
}
}
try! realm.write {
realm.add(leagueObject, update: true)
}
}
}
【问题讨论】:
-
你试过
items!.matches.indexOf(currentText!)吗?根据您的描述,items!不是字典。 -
是,但项目没有名为
matches的成员 -
你能说明
items的初始化位置吗? -
我现在已经添加了,顺便说一句,我正在使用 realm.io 作为数据库
-
下面的答案显示了您的解决方案。