简体   繁体   English

如何将一个结构转换为另一个具有相同变量 Swift (iOS) 的结构?

[英]How to convert one struct to another with same variables Swift (iOS)?

I need help with converting one object to another.我需要帮助将一个 object 转换为另一个。 Might have searched 10-20 website didn't find any good answer.可能已经搜索了10-20 个网站没有找到任何好的答案。

public struct UniversityJoinChatViewModel {
    public let id: Int?
    public let name: String?
    public init(nameOfModel model : UniversityGroupChatItem?) {
          self.id = model?.id;
          self.name = model?.name;
    }
}
public struct UniversityGroupChatItem: Codable {
    public let id: Int?
    public let name: String?
    public init(id: Int?, name: String?) {
        self.id = id
        self.name = name
    }
}

I did this:我这样做了:

let say I have value UniversityGroupChatItem in variable universityGroupChatItem and my universityGroupChatItem contains is not nil and contains value.假设我在变量universityGroupChatItem中有值 UniversityGroupChatItem 并且我的 universityGroupChatItem 包含不是零并且包含值。 I tried this it did not work.我试过这个它没有用。

universityJoinChatViewModel = (universityGroupChatItem) as! UniversityJoinChatViewModel

The app crashed.该应用程序崩溃了。

Then I tried:然后我尝试了:

map and compactmap mapcompactmap

None worked.没有工作。

I am not getting how to convert UniversityGroupChatItem struct to UniversityJoinChatViewModel struct.我不知道如何将UniversityGroupChatItem结构转换为UniversityJoinChatViewModel结构。

I do not understand how to convert one struct to another struct both has same number name variables.我不明白如何将一个结构转换为另一个结构,两者都具有相同的数字名称变量。

You can't force cast one object into another (no matter struct, class, enum ect.) even if they are fully the same inside您不能强制将一个 object 转换为另一个(无论是结构、class、枚举等),即使它们内部完全相同

You need to implement inits where one object takes fields from another one.您需要实施 inits,其中一个 object 从另一个获取字段。

map is function to sequences, if You have only 1 object just init it with another one map是 function 序列,如果你只有 1 object 只需用另一个初始化它

Examples:例子:

  public struct UniversityJoinChatViewModel {
        public let id: Int?
        public let name: String?
        public init(nameOfModel model : UniversityGroupChatItem?) {
              self.id = model?.id;
              self.name = model?.name;
        }
    }
    public struct UniversityGroupChatItem: Codable {
        public let id: Int?
        public let name: String?
        public init(id: Int?, name: String?) {
            self.id = id
            self.name = name
        }
    }
    
    let universityGroupChatItem = UniversityGroupChatItem(id: 0, name: "name")
    let universityJoinChatViewModel = UniversityJoinChatViewModel(nameOfModel: universityGroupChatItem)
    let groupArray = Array(repeating: universityGroupChatItem, count: 10)
    let joinArray = groupArray.map(UniversityJoinChatViewModel.init(nameOfModel:))

In your case, you already have the constructor that can help you to achieve what you want, so instead of trying to cast the object, create a new one:在你的情况下,你已经有了可以帮助你实现你想要的构造函数,所以不要尝试转换 object,而是创建一个新的:

universityJoinChatViewModel = UniversityJoinChatViewModel(nameOfModel: universityGroupChatItem)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM