我将Xcode更新为版本7和Swift 2.0。我的应用程序工作,并且在Xcode 6中使用Swift 1.2没有任何错误。我现在得到错误"定义与之前的值冲突"在方法func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
中,我看到了' tableView
'的先前定义在这里
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searchPredicate == nil {
return arrayItem.count ?? 0
} else {
return arrayFilterOfNames.count ?? 0
}
}
错误就在这里
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("artistTwo", forIndexPath: indexPath) as! SongsCellArtist
if searchPredicate == nil {
var currentString = arrayItem[indexPath.row]
var urlULTRA: NSURL!
var ultraDirectory = fileManager.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)
if var ultraURL: NSURL = ultraDirectory.first as? NSURL {
urlULTRA = ultraURL.URLByAppendingPathComponent(currentString)
}
var ultraMediaPlayer = AVPlayerItem(URL: urlULTRA)
var ultraCommonMetaData = ultraMediaPlayer.asset.commonMetadata
for ultraData in ultraCommonMetaData {
if ultraData.commonKey == "title" {
// println("ultra data equals \(ultraData.stringValue)")
nameSongForPass = ultraData.stringValue
}
if ultraData.commonKey == "artist" {
nameArtistForPass = ultraData.stringValue
}
if ultraData.commonKey == "album" {
nameAlbumForPass = ultraData.stringValue
}
if ultraData.commonKey == "artwork" {
imageSongForPass = ultraData.dataValue
}
}
cell.nameSong?.text = nameSongForPass
if nameAlbumForPass != nil {
cell.artistAlbumName?.text = "\(nameArtistForPass) - \(nameAlbumForPass)"
} else {
cell.artistAlbumName?.text = "\(nameArtistForPass)"
}
if imageSongForPass != nil {
cell.imageSongs?.image = UIImage(data: imageSongForPass)
} else {
cell.imageSongs?.image = UIImage(named: "Notes100.png")
}
} else {
var name: String! = arrayFilterOfNames[indexPath.row]
cell.nameSong.text = name
}
return cell
}
答案 0 :(得分:6)
这绝对是“{}”问题。请检查你是否正确关闭了花括号。
答案 1 :(得分:4)
tableView:cellForRowAtIndexPath
的返回值被声明为可选
... -> UITableViewCell?
编辑:实际上它取决于Swift版本
同时,cellForRowAtIndexPath
的签名已更改为非可选的返回类型。
答案 2 :(得分:1)
检查tableview delegate functions are outside of Viewdidload
,并正确设置表委托和数据源。
对我来说,我有一个带有viewdidload的函数,把它取出并再次构建在Swift 2.2中工作
答案 3 :(得分:1)
因为它在签名中使用了两次相同的参数名称。
答案 4 :(得分:0)
将声明更改为:
override func tableView(tv: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {}
或更改您的媒体资源名称。
答案 5 :(得分:0)
我遇到了同样的错误,因为我做了类似的事情:
func doSomething (param1: String, param1: String){
print(param1)
print(param1)
}
这是因为我的论点都是param1
!我其实想写param
和param2
。
艰难地学到了它!