定义与Swift 2.0中的先前值冲突

时间:2015-09-18 08:34:52

标签: ios xcode swift uitableview swift2

我将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
    }

6 个答案:

答案 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!我其实想写paramparam2

艰难地学到了它!