gpt4 book ai didi

swift - 辛格尔顿?或者,还有更好的方法?

转载 作者:行者123 更新时间:2023-11-30 12:36:19 25 4
gpt4 key购买 nike

我即将构建一个单例,但我不确定这是否是正确的解决方案。

我有这个问题,我有一个创建 URLSessionTaskDelegate 的类。我想在另一个类中使用该委托(delegate)来从文件上传中获取一些信息。

所以我在想是否可以将这个加上一些其他信息放入这样的对象中:

    public class UploadQueueCellData
{
let _FileName:String
let _UploadTaskDelegate:URLSessionTaskDelegate
let _ImageData:Data
init(fileName:String,imageData:Data,uploadTaskDelegate:URLSessionTaskDelegate)
{
_FileName = fileName
_ImageData = imageData
_UploadTaskDelegate = uploadTaskDelegate
}

.... etc
}

然后将其存储在一个单例中,其中包含一个数组:

        public class ImageUploadQueue
{
private var _queue = [UploadQueueCellData]()
private let imageUploadQueue:ImageUploadQueue? = nil
public func GetImageUploadQueueInstance() -> ImageUploadQueue
{
if imageUploadQueue == nil
{
imageUploadQueue = ImageUploadQueue()
return imageUploadQueue
}
else
{
return imageUploadQueue!
}
}
private init()
{

}
.... etc
}

然后在另一个类中发生更改时使用它来更新信息。

但是没有单例有更好的方法吗?从 Swift 3 的角度来看,我是否正确地执行了单例?

编辑:

所以我发现我做的单例错误:

    public class ImageUploadQueue
{
private var _queue = [UploadQueueCellData]()
//private let imageUploadQueue:ImageUploadQueue? = nil
static let shared = ImageUploadQueue()

private init()
{

}

这样会更好吗?但问题仍然是,是否有比使用单例模式更好的方法呢?我说更好只是因为我将单例模式视为最后的手段。

最佳答案

我发现我的问题是由于我无法让我在一个 View 中创建的类在另一个 View 中显示信息。我的解决方案是上面的单例解决方案,它有效,但我觉得使用该解决方案很肮脏。

我终于找到了一种不同的方法来做到这一点。我刚刚创建了一个包含数组的类,而不是单例,就像上面的单例一样:

public class ImageUploadQueue
{
private var _queue = [UploadQueueCellData]()
....//Class specific code
}

然后就像单例一样使用该类作为对数据的引用,但我的类在它上面有这个功能,使 View 能够使用队列中的信息

public func GetUploadQueue()->ImageUploadQueue
{
return _networkRequester.uploadQueue
}

但是该类是由 viewA 创建的,我需要 ViewB 中的信息。所以我在 viewB 中做了这个

var uploader:ImageUpload
{
get
{
return ((self.tabBarController!.viewControllers![0] as? UINavigationController)?.viewControllers[0] as! ViewController).uploader
}
set
{
(self.tabBarController!.viewControllers![0] as! ViewController).uploader = newValue
}
}

它解决了我最初无法从 viewA 到 ViewB 获取信息的问题,同时避免了使用单例。

关于swift - 辛格尔顿?或者,还有更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42828756/

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