【问题标题】:Whats the difference between different types of global declaration不同类型的全局声明有什么区别
【发布时间】:2019-06-17 05:31:46
【问题描述】:

我需要一些关于变量(希望是函数)全局声明的建议

声明一个像这样的变量有什么区别

import Foundation

var myglobalvariable = ""

import Foundation

struct globalvariablestruct
{
static var myglobalvariable = ""
}

import Foundation

class globalstructoperation {
      struct glovalVariable {
      static var myglobalvariable = ""
     }
 }

另外,我有一个 API,在不同的视图控制器中使用了大约 5 次,可以将其声明为全局函数吗?

import Foundation
import Alamofire

func myapicall()
{
//stuff
}

如果有(很多)全局变量/函数,Apple 会拒绝应用程序吗?

在多个 ViewController 之间传递变量的最佳方式是什么?另外,有一些变量在 90% 的 ViewControllers 上都使用,如果我声明它们是全局变量可以吗?

【问题讨论】:

  • “有什么区别”,除了命名空间。
  • Apple 不在乎,即使您将所有变量声明为全局变量。你可以通过这个question 找出你应该避免使用全局变量的原因。

标签: swift


【解决方案1】:

这个问题有很多问题。我试图回答一些问题。也许对你有帮助。

方法 1

var myglobalvariable = ""

您无需任何参考即可访问这些类型的变量。你可以 在任何文件中定义它并且可以在当前模块中访问它 任何地方。因此,您可以在任何文件之外的某个位置定义它 范围。不需要静态,所有全局变量都是 懒惰地计算。

方法 2

struct globalvariablestruct{
    static var myglobalvariable = ""
}

您可以使用struct 名称访问这些类型的变量,或者您可以说我们需要使用struct 名称来访问这些变量。

方法 3

class globalstructoperation {
      struct glovalVariable {
         static var myglobalvariable = ""
     }
 }

您可以使用structclass name 访问这些类型的变量。此外,它使用结构创建一个pass by reference 变量。

另外,我有一个 API,在不同的视图控制器中使用了大约 5 次,可以将其声明为全局函数吗?

是的,您可以使用全局函数或创建 singleton 类 一样的。

如果有(很多)全局变量/函数,Apple 会拒绝一个应用程序吗?

不,因为 Apple 审核团队只检查了 我们的应用和应用不违反任何 Apple 政策。

在多个 ViewController 之间传递变量的最佳方式是什么?还有,有一些变量在 90% 的 ViewcController 上都用到了,我把它们声明为全局变量可以吗?

可以,可以在项目中定义全局变量的n number 因为 Apple 不关心内部开发方法。

【讨论】:

    【解决方案2】:

    这完全是关于面向对象的编程概念之一。这里的问题是什么是封装?

    let pi = 3.14159
    

    第一种方法通常是可怕的形式。如果您的整个项目中只有几个变量,那还可以,但是当变量很多时会发生什么?让我们考虑一下您的项目团队包括 10 个 ios 开发人员。当有人想要使用这个全局变量时会发生什么。他/她怎样才能找到它们并了解它们是什么?

    class MathObjects{
       static let pi = 3.14159
    }
    print(MathObjects.pi)
    

    我认为,更好的方法是将全局变量封装到它们自己的类中。这将所有内容都放在一个地方,并为您提供 XCodes 方便的自动完成功能的额外好处。

    【讨论】:

    • 那么将它们封装在 struct VS 类中有何区别/优势?
    • 如果只使用静态变量,这里没有优势或劣势。但通常为什么选择结构而不是类?这是答案:stackoverflow.com/questions/24232799/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多