是否可以在单独的文件中使用 UISearchBarDelegate 扩展名?

Is it possible to have UISearchBarDelegate extension in separate file?

extension HomeViewController: UISearchBarDelegate {


    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        //code
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
         //code     
    }
}

当它位于我的 HomeViewController 的底部时,它工作正常。
我想知道我是否可以将这个扩展分开在单独的文件中?

我忘了包含 UIKit。

import Foundation
import UIKit

extension HomeViewController {
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)        {
      //code
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
     //code
    } 
}

此外,您需要在 ViewController 中继承 UISearchBarDelegate,而不是在扩展中。

您可以像下面这样实现。

viewDidLoad(){
  let searchBar = UISearchBar()
  searchBar.delegate = DelegateFile()
}

create a file.

class DelegateFile: NSObject, UISearchBarDelegate{
    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
        //
    }
}

然后在单独的文件中实现您的委托方法。

是的,这是可能的。

希望您了解 swift 中的 extention

Extensions 是一项有用的功能,有助于向现有的 ClassStructureEnumerationProtocol 类型添加更多功能。这包括为没有原始源代码的类型添加功能。

代码:

class HomeVC: UIViewController {

    var searchBar = UISearchBar()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.searchBar.delegate = self   
    }
}

创建另一个名为 HomeVC+SearchBarDelegate

的文件
import Foundation
import UIKit

extension HomeVC: UISearchBarDelegate {

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        //code
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
         //code
    }
}

希望对您有所帮助。

谢谢