我 100% 确定这已得到回答,但我发现的答案似乎无法融入我的解决方案。我有以下代码操场。

import Foundation

public class AuthenticationInfo
{
public class RootObject
{
    var resultParameters: ResultParameters = ResultParameters()

}

public class ResultParameters
{
    var adminInfo: AdminInfo = AdminInfo()
    var ServerBuildNumber: Int = -1
    var ServerIs64Bit: Bool = false
    var ServerOSPlatform: Int = -1
    var ServerStartTime: Int64 = -1
    var ServerVersion: String = ""
    var EnableLiveDataUpdates: Bool = false
    var DelayLiveDataUpdates: String = ""
    var SessionTimeout: Int = 0;
    var ServerName: String = ""
    var ServerPort: Int = -1
    var UserName: String = ""
    var WebAPIVersion: String = ""
    var Locale: String = ""
}

public class AdminInfo
{
    var AdminUUID: String = ""
    var AllowChangeAgentClientInfoSettings: Int = -1
    var AllowChangeAgentCustomFieldSettings: Int = -1
    var AllowChangeAgentGeneralSettings: Int = -1
    var AllowChangeAgentServerSettings: Int = -1
    var AllowChangeComputerTracking: Int = -1
    var AllowChangeComputerTrackingScreenshot: Int = -1
    var AllowChangeCustomFields: Int = -1
    var AllowChangeHistoryOptions: Int = -1
    var AllowChangeMobileDeviceTracking: Int = -1
    var AllowEnterCustomFieldData: Int = -1
    var AllowManageDeviceUsers: Int = -1
    var AllowManageiOSDevices: Int = -1
    var AllowMobileRemoteControl: Int = -1
    var AllowModifyADEPAccount: Int = -1
    var AllowModifyBookstoreBooks: Int = -1
    var AllowModifyMDMDeviceEnrollmentProfiles: Int = -1
    var AllowModifyMobileActions: Int = -1
    var AllowModifyMobileMedia: Int = -1
    var AllowModifySDConfigProfiles: Int = -1
    var AllowModifySDGroups: Int = -1
    var AllowModifySDImages: Int = -1
    var AllowModifySDPackages: Int = -1
    var AllowModifySLPackages: Int = -1
    var AllowModifySamsungLicenses: Int = -1
    var AllowModifyStagingServers: Int = -1
    var AllowModifyVPPAccount: Int = -1
    var AllowModifyiOSApplications: Int = -1
    var AllowModifyiOSConfigurationProfiles: Int = -1
    var AllowModifyiOSPolicies: Int = -1
    var AllowRemoteControl: Int = -1
    var AllowRemoveCommandsFromHistory: Int = -1
    var AllowRemoveComputerRecords: Int = -1
    var AllowRemoveInventoryData: Int = -1
    var AllowRemoveLicenseReports: Int = -1
    var AllowRemoveSDLogEntry: Int = -1
    var AllowRemoveiOSDeviceRecords: Int = -1
    var AllowRemoveiOSHistoryCommands: Int = -1
    var AllowResetSDPackges: Int = -1
    var AllowRetrySDPackges: Int = -1
    var AllowVPPLicenseManagement: Int = -1
    var AllowViewAdminCenter: Int = -1
    var AllowViewCommandsWindow: Int = -1
    var AllowViewComputerTrackingData: Int = -1
    var AllowViewComputerTrackingScreenshot: Int = -1
    var AllowViewCustomFields: Int = -1
    var AllowViewMobileDeviceTrackingData: Int = -1
    var AllowViewSDCenter: Int = -1
    var AllowViewSLCenter: Int = -1
    var AllowViewServerStatus: Int = -1
    var CanChangeServerSettings: Int = -1
    var CanDeployAgents: Int = -1
    var CanLogin: Int = -1
    var CanSeeAllRecords: Int = -1
    var CommandPermissions: Int64 = -1
    var CommandPermissions2: Int = -1
    var IsADUser: Int = -1
    var IsSuperAdmin: Int = -1
    var id: Int = -1
    var CommandPermissionsLow32: Int64 = -1
    var CommandPermissionsHigh32: Int = -1
}

}

var lobj_AuthenticationInfo: AuthenticationInfo
var lobj_AuthenticationInfo_RootObject: AuthenticationInfo.RootObject

lobj_AuthenticationInfo = AuthenticationInfo()
lobj_AuthenticationInfo_RootObject = lobj_AuthenticationInfo.RootObject

在最后一行,我收到以下错误:

静态成员 RootObject 不能用于 AuthenticationInfo 类型的实例。

更多信息:
这些类是由基于 JSON 数据的代码生成器创建的,这些数据将从我调用的 Web api 返回。因此,我相信这些对象的结构需要保持完整,所以当我使用 EVRefelction 将数据加载到类中时,结构与数据完全匹配。

有人可以帮助我让这个工作吗?

最佳答案

与 Java 不同,在 swift 中,所有内部类都是隐式的 static 。例如:

public class Outer {
    public class Inner {

    }
}

当你想创建一个 Inner 类型的对象时,你不需要先创建一个 Outer 类型的对象。你可以这样做:
let x = Outer.Inner()

并且因为内部类是静态的,它们不能被外部类的实例访问:
let x = Outer()
let y = x.Inner //Wrong!

我认为您在这里要做的是让 RootObject 非静态,以便可以从 AuthenticationInfo 的实例访问它。这不能直接完成。您应该在 RootObject 类中创建一个 AuthenticationInfo 实例:
public class AuthenticationInfo {
    public class RootObject {
         //blah blah blah
    }
    // Other inner classes goes here
    var rootObj = RootObject()
}

现在您可以创建 AuthenticationInfo 的实例并访问存储在 Authentication Info 中的 rootObj:
var x = AuthenticationInfo()
var y = AuthenticationInfo.rootObj

从你的编码风格来看,我猜你是一名 Java 程序员。您明确地编写了所有类型的变量。但在 swift 中,这很少使用。

关于swift - 访问子类时不能在类型错误的实例上使用静态成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35375126/

10-14 11:36
查看更多