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

Xcode 当我在Swift中声明这个结构时,为什么我需要将变量传递给它?,xcode,function,swift,methods,struct,Xcode,Function,Swift,Methods,Struct,我做错了什么? 我有一个类,它有一个变量,它是一个结构,工作得很好。但是,我在结构中还有一个变量,它的类型是另一个结构。当我声明变量(第二级结构)时,它一直要求我提供变量。。我只希望它们为空,我将设置它们或稍后发送它们的值 错误文本: 调用中缺少参数“SV\u位置\u经度”的参数 呼叫代码: 误差线 结构代码: 但是,当我将details结构设置为类变量时,它工作得很好 var SV_Stink_StinkDetails:SV_StinkDetails_Model! = SV_StinkDeta

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

错误文本: 调用中缺少参数“SV\u位置\u经度”的参数

呼叫代码: 误差线 结构代码: 但是,当我将details结构设置为类变量时,它工作得很好

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?
}
由于使用默认init,因此不必声明值(如果使用自定义init,也不需要声明值)
在我放置在位置上方的结构中,模型是可选的,这意味着您可以将初始值设置为“nil”。稍后您可以添加此信息。 记住,无论何时尝试访问该值,都要检查(使用“if-let”语句)该值是否已设置

对于附加值:
您不需要将“!”放在模型结构中的类型声明后面

如果您更改了这两件事,您可以使用以下方法获得新类:

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)
}

绝对传奇,谢谢。我仍然觉得很难理解Swift中血腥的可选因素。非常感谢您回答@milo526如何在我的位置结构中调用函数?这里可以使用if-let语句。您可以检查optioneel位置是否已设置,如果已设置,您可以使用普通位置结构(无法访问我的Mac atm,我今天下午将上传一个示例)@TimHiatt,因为注释不是解释代码的最佳位置;我用代码制作了一个pastebin粘贴,希望这能帮助您使用函数
struct SV_StinkDetails_Model{
    var SV_StinkDetails_Description:String
    var SV_StinkDetails_RecordingDate:NSDate
    var SV_StinkDetails_Location :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
}

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)
}