当我在 Swift 中声明它时,为什么需要传递变量这个结构?

How come I need to pass variables this struct when I declare it in Swift?

我做错了什么? 我有一个 Class 和一个变量,它是一个结构并且工作得很好。但是,我在结构中也有一个属于另一个结构类型的变量。当我声明该变量(二级结构)时,它一直要求我提供变量。我只希望它们为空,我将设置它们或稍后向它们发送值。

错误文本:

调用中参数 'SV_StinkLocation_Longitude' 缺少参数

调用代码:

struct SV_StinkDetails_Model{
    var SV_StinkDetails_Description:String = ""
    var SV_StinkDetails_RecordingDate:NSDate! = NSDate()
    var SV_StinkDetails_Location:SV_StinkLocation_Model! = SV_StinkLocation_Model()
}

错误行

var SV_StinkDetails_Location:SV_StinkLocation_Model! = SV_StinkLocation_Model()

结构代码:

import Foundation
import UIKit
import CoreData
import AVFoundation
import CoreLocation


struct SV_StinkLocation_Model{  
    var SV_StinkLocation_Longitude:NSNumber!
    var SV_StinkLocation_Latitude:NSNumber!
    var SV_StinkLocation_Suburb:String!
    var SV_StinkLocation_State:String!
    var SV_StinkLocation_Country:String!
}

然而,当我将 details 结构化为 class 变量时,它工作正常。

var SV_Stink_StinkDetails:SV_StinkDetails_Model! = SV_StinkDetails_Model()

我做错了什么?

我建议将模型结构更改为:

struct SV_StinkDetails_Model{
    var SV_StinkDetails_Description:String
    var SV_StinkDetails_RecordingDate:NSDate
    var SV_StinkDetails_Location :SV_StinkLocation_Model?
}

您不必声明值,因为您使用的是默认初始化(如果您使用自定义初始化,则也不需要声明它们)
在我放在上面的结构中,Location_Model 是可选的,这意味着您可以将初始值设置为“nil”。稍后您可以添加此信息。 不过,请记住在您尝试访问该值时检查(使用“if let”语句)是否已设置该值!

附加值:
你不需要把“!”在模型结构中的类型声明后面。

如果您更改这两件事,您可以使用以下方式获得新的 class:

import Foundation
import UIKit
import CoreData
import AVFoundation
import CoreLocation

struct SV_StinkLocation_Model{
    var SV_StinkLocation_Longitude:NSNumber
    var SV_StinkLocation_Latitude:NSNumber
    var SV_StinkLocation_Suburb:String
    var SV_StinkLocation_State:String
    var SV_StinkLocation_Country:String
}

struct SV_StinkDetails_Model{
    var SV_StinkDetails_Description:String
    var SV_StinkDetails_RecordingDate:NSDate
    var SV_StinkDetails_Location :SV_StinkLocation_Model?
}

var details_model = SV_StinkDetails_Model(SV_StinkDetails_Description: "Description:", SV_StinkDetails_RecordingDate: NSDate(), SV_StinkDetails_Location: nil)

details_model.SV_StinkDetails_Location = SV_StinkLocation_Model(SV_StinkLocation_Longitude: 1, SV_StinkLocation_Latitude: 1, SV_StinkLocation_Suburb: “Suburb", SV_StinkLocation_State: "State", SV_StinkLocation_Country: "Country")

最后,您可以使用以下方式访问选项值的经度:

if let longtitude =  details_model.SV_StinkDetails_Location?.SV_StinkLocation_Longitude {
    println(longtitude)
}