Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用变异函数重构大型Swift结构_Ios_Swift_Refactoring - Fatal编程技术网

Ios 用变异函数重构大型Swift结构

Ios 用变异函数重构大型Swift结构,ios,swift,refactoring,Ios,Swift,Refactoring,我正在尝试用Swift简化一个巨大的文件,我不确定什么是最好的方法。这可能是一个非常幼稚的问题,因为我对斯威夫特还是相当陌生:) 为了简单起见,假设我有一个Userstruct,在其中我可以调用大量不同的setupModeA,setupModeB等等,根据不同的条件调用: struct用户{ var currentMode:String 变异函数setupModeA(){ currentMode=“A” } 变异函数setupModeB(){ currentMode=“B” } //对于每种模式

我正在尝试用Swift简化一个巨大的文件,我不确定什么是最好的方法。这可能是一个非常幼稚的问题,因为我对斯威夫特还是相当陌生:)

为了简单起见,假设我有一个
User
struct,在其中我可以调用大量不同的
setupModeA
setupModeB
等等,根据不同的条件调用:

struct用户{
var currentMode:String
变异函数setupModeA(){
currentMode=“A”
}
变异函数setupModeB(){
currentMode=“B”
}
//对于每种模式,依此类推
}
我希望能够将
setupMode*()
函数及其关联的助手函数放在一个单独的文件中,以便于阅读,因为大多数时候我只关注一种模式

我在想:

struct ModeA{
变异函数设置(){
//从那里改变模式
}
}
但是我不知道如何简单地将
用户
信息传递和变异到这个新结构。

我想:

  • user
    结构中使用
    user
    变量初始化一组
    ModeX
    对象,并在init上传递
    user
    ,但这会产生奇怪的行为
  • ModeX
    structs上使用静态方法,但是我不太确定如何变异
    User
  • 采取一种更实用的方法&不改变
    用户
    ,而是每次克隆并重新分配它。。。这可能会起作用,但由于我的代码是非常顺序的,它感觉像是在白白增加复杂性/内存使用
  • 从结构转换到类,希望它能给我其他的选择。。。但我担心一切都会破裂
  • 非常复杂的事情,感觉太奇怪和不直观,这里不能提及:)

任何指针都将不胜感激。

您可以将函数移到扩展名(可以在单独的文件中)
扩展名用户{mutating func setupModeA(){…}
。也许这只是您的简化示例,但为什么不使用一个将模式作为参数的变异函数?也许您可以对模式进行枚举?@JoakimDanielson extensions可能是个好主意,我不知道!是的,这是一个简化的示例,在美国,每个变异函数都在改变几十个参数ERI如果您使用特定的结构来设置每个模式,那么将接受用户并返回用户的公共方法设置为静态(因此不会发生变化),
struct mode设置为静态设置(\uuser:user)->用户
,只需创建inparameter@JoakimDanielson谢谢你的帮助!你会建议使用多结构还是扩展结构?这取决于不同模式之间有多少通用代码,但我觉得使用多结构作为工厂是一种更干净的解决方案。