使用未解析的标识符“indexPath”

Posted

技术标签:

【中文标题】使用未解析的标识符“indexPath”【英文标题】:Use of unresolved identifier 'indexPath' 【发布时间】:2018-09-09 01:53:31 【问题描述】:

虽然我把它改成了小写或大写的“i”,但它仍然是错误的。

这是我的代码:

import UIKit
import AVFoundation

var songs:[String] = []
var audioPlayer = AVAudioPlayer()

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 
    @IBOutlet weak var tblview: UITableView!

    override func viewDidLoad() 
        super.viewDidLoad()

        gettingSongName()
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return songs.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = UITableViewCell(style: .default, reuseIdentifier: "cell"); cell.textLabel?.text = songs[indexPath.row]
        return cell
    

    func gettingSongName()
        let folderURL = URL(fileURLWithPath: Bundle.main.resourcePath!)//declare a variable to set the URL path for the resource file
        do
            let songPath = try FileManager.default.contentsOfDirectory(at: folderURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
            for song in songPath
                var mysong = song.absoluteString
                if mysong.contains(".mp3")
                
                    let findstring = mysong.components(separatedBy: "/")
                    mysong = findstring[findstring.count-1]
                    mysong = mysong.replacingOccurrences(of: "%20", with: " "); mysong = mysong.replacingOccurrences(of: ".mp3", with: "")
                    songs.append(mysong)
                
            
            tblview.reloadData()
        
        catch 
    

    func didSelectRowatIndexPath()
        do
            let audioPath = Bundle.main.path(forResource: songs[indexPath.row], ofType: ".mp3")
            try audioPlayer = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPath!) as URL)
            audioPlayer.play()
        
        catch
        
    

这行代码中func didSelectRowatIndexPath()出现错误:

let audioPath = Bundle.main.path(forResource: songs[indexPath.row], ofType: ".mp3")

我该怎么办?我正在使用 Xcode 9.4。

【问题讨论】:

您的didSelectRowatIndexPath() 中没有声明indexPath。要实现tableView(_:didSelectRowAt:) 方法吗? 与您的问题无关,但您需要了解您的 songsaudioPlayer 变量是全局变量,它们不是视图控制器的实例属性(它们应该是)。 @rmaddy 他需要明白他必须在使用变量或常量之前声明它们。 【参考方案1】:

使用 UITableView 的委托方法而不是你定义的方法 -

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)


// Here use your indexPath.row


【讨论】:

以上是关于使用未解析的标识符“indexPath”的主要内容,如果未能解决你的问题,请参考以下文章

[Vue CLI 3] 配置解析之 indexPath

使用未解析的标识符“kCAFillModeForwards”

使用未解析的标识符 FBSession

使用未解析的标识符 'json' (Swift 3) (Alamofire)

使用未声明的类型“DKAsset”,使用未解析的标识符“DKImagePickerController”?

出现错误:使用未解析的标识符“LinkingObjects”