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

ff29svar  于 2022-11-06  发布在  Swift
关注(0)|答案(6)|浏览(232)

我将Xcode更新为版本7和Swift 2.0。我的应用程序可以正常工作,在Swift 1.2的Xcode 6中没有任何错误。现在,我在方法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
    }
o4hqfura

o4hqfura1#

这肯定是“{}”的问题。请检查您是否正确关闭了花括号。

mv1qrgav

mv1qrgav2#

tableView:cellForRowAtIndexPath的返回值声明为可选

... -> UITableViewCell?

**编辑:**实际上,这取决于Swift版本。

同时,cellForRowAtIndexPath的签名已更改为非可选的返回类型。

w9apscun

w9apscun3#

请检查tableview delegate functions are outside of Viewdidload,并检查是否正确设置了表委托和数据源。
对我来说,我在Swift 2.2中使用了viewdidload中的函数,将其取出并重新构建

ki0zmccv

ki0zmccv4#

因为它在签名中使用了两次相同的参数名。

iezvtpos

iezvtpos5#

将声明更改为:

override func tableView(tv: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {}

或更改属性名称。

8ehkhllq

8ehkhllq6#

我得到同样的错误,因为我做了这样的事情:

func doSomething (param1: String, param1: String){
    print(param1)
    print(param1)
}

这是因为我的两个参数都是param1!我实际上想写paramparam2
我可是吃了大苦头才知道的!

相关问题