根据您来自的类(Swift)为变量赋予不同的值

Posted

技术标签:

【中文标题】根据您来自的类(Swift)为变量赋予不同的值【英文标题】:Attribute a different value to a variable depending on the class from which you are coming (Swift) 【发布时间】:2017-11-18 12:41:39 【问题描述】:

在我的HomeClass 中有一个static var globalLimit: Int = 0,我必须在其他类中传递他的值,这是我的准备函数

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) 



           if let vc = segue.destination as? SelectClass 
                  vc.limit = Int(steppeR.value)
                  HomeClass.globalLimit = Int(steppeR.value)
                  HomeClass.globalRadiusLimit = Int(stepperRadius.value) 
        
           else if let np = segue.destination as? CourseClass2 
            np.categories = filteredList
            np.numberPlaces = filteredList.count
            np.radius = Int(stepperRadius.value)
        

    

现在的问题是,在我什至可以从SelectClass 到达的CourseClass2 课程中,我有var numberPlaces = 0,他的价值是

override func viewDidLoad() 
        super.viewDidLoad()

        numberPlaces = HomeClass.globalLimit

    

但是就像你在我的准备函数中看到的那样,当我直接从 HomeClass 进入 CourseClass2 时,我想要 numberPlaces = filteredList.count 的值,但它当然不起作用,因为它与 numberPlaces = HomeClass.globalLimitCourseClass2 的 viewDidload,那么我该如何解决这个问题呢?

【问题讨论】:

只需将 var numberPlaces = HomeClass.globalLimit 声明为存储属性并从 viewDidLoad 中删除其初始化 我该怎么做? 您在 CourseClass2 中声明 numberPlaces 的位置,只需为其赋值即可。这将是它的默认值,稍后可以更改,这就是您将在 HomeClass 中执行的操作 我试过了,但是不行 不要将numberOfPlaces 设置为您的viewDidLoad。使该值的设置成为调用 viewController 的责任。 【参考方案1】:

这样试试:

将您的 numberPlaces 变量设置为可选:

var numberPlaces: Int?

然后检查是否加载了视图,如果它为 nil:

override func viewDidLoad() 
    super.viewDidLoad()

    if numberPlaces == nil 
        numberPlaces = HomeClass.globalLimit
    

【讨论】:

以上是关于根据您来自的类(Swift)为变量赋予不同的值的主要内容,如果未能解决你的问题,请参考以下文章

是否可以根据从 Swift 中的 UIViewController 继承的类中的另一个来初始化变量?

将 Firebase Firestore 文档值分配给 swift 变量 [重复]

如何判断 Swift 中实例变量的类是啥

您可以在 Java 中访问私有变量,而无需来自非内部类的类的 getter [重复]

Swift学习之中的一个:常量与变量

出错处理函数