gpt4 book ai didi

iOS swift : extract a common method using type as input params?

转载 作者:搜寻专家 更新时间:2023-11-01 06:01:53 24 4
gpt4 key购买 nike

我有3个结构非常相似的方法,我想提取一个通用方法,如下所示:

private func navigateToViewController(animated: Bool, viewControllerType: T, viewControllerNibName: String, mode: MenuMode) { ... }

但是,我不知道如何处理类型参数,有什么好的建议吗?谢谢!

private func navigateToEditorView(animated: Bool) {
self.dismiss(animated: false, completion: nil)

if self.editorViewController == nil {
let editor = EditorViewController(nibName:"EditorViewController", bundle: nil)
editor.exitCallBack = self.setBackgroundImage
self.editorViewController = editor
}

if let editor = self.editorViewController {
self.navigationController?.pushViewController(editor, animated: animated)
}

self.currentMenuMode = .editor
}

private func navigateToStorageView(animated: Bool) {
self.dismiss(animated: false, completion: nil)

if self.storageViewController == nil {
let storage = StorageViewController(nibName:"StorageViewController", bundle: nil)
storage.exitCallBack = self.setBackgroundImage
self.storageViewController = storage
}

if let storage = self.storageViewController {
self.navigationController?.pushViewController(storage, animated: animated)
}

self.currentMenuMode = .storage
}

private func navigateToGalleryView(animated: Bool) {
self.dismiss(animated: false, completion: nil)

if self.galleryViewController == nil {
let gallery = GalleryViewController(nibName:"GalleryViewController", bundle: nil)
gallery.exitCallBack = self.setBackgroundImage
self.galleryViewController = gallery
}

if let gallery = self.galleryViewController {
self.navigationController?.pushViewController(gallery, animated: animated)
}

self.currentMenuMode = .gallery
}

最佳答案

我认为使用协议(protocol)是处理您所有问题的最佳方式

enum MenuMode {
case editor
case storage
case gallery
}

protocol ExitCallBackHandler where Self: UIViewController {
var exitCallBack: (() -> Void)? { get set }; // I don't know what it is
var currentMenuMode: MenuMode { get }
}

各个ViewController的接口(interface)

class EditorViewController: UIViewController, ExitCallBackHandler {
var exitCallBack: (() -> Void)?
var currentMenuMode: MenuMode {
return .editor
}
// ...
}

class StorageViewController: UIViewController, ExitCallBackHandler {
var exitCallBack: (() -> Void)?
var currentMenuMode: MenuMode {
return .storage
}
// ...
}

class GalleryViewController: UIViewController, ExitCallBackHandler {
var currentMenuMode: MenuMode {
return .gallery
}
var exitCallBack: (() -> Void)?
// ...
}

最后

private func navigateToViewController<T: ExitCallBackHandler>(animated: Bool, viewControllerType: T.Type) {
self.dismiss(animated: false, completion: nil)
var vc = T(nibName: String(describing: viewControllerType), bundle: nil)
vc.exitCallBack = ...
self.currentMenuMode = vc.currentMenuMode
self.navigationController?.pushViewController(vc, animated: animated)
}

这样使用:

navigateToViewController(animated: true, viewControllerType: StorageViewController.self)

关于iOS swift : extract a common method using type as input params?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47383700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com