在Objective-C中我以前使用这个语句有外部变量:
extern int GlobalInt;
可以在没有任何限制的情况下从任何类访问和更改它。
如何在Swift 3.0中生成这样的变量?
根据答案,很难知道变量被声明的类。让一切搞得一团糟。
是否有任何变通方法可以使代码清晰易懂,以便将来进行修改?
他们如何从objective-C替换原子性,访问权限,存储属性属性。
他们是否删除了这些功能,还是我们可以快速实现这些功能?
答案 0 :(得分:7)
使用:
var globalInt = 0
Extern是(Objective-)C中的一个构造,用于告诉编译器,变量是在其他地方定义的(数据在其他地方)。然后由链接器解决的位置(创建可执行文件的最后阶段)。
您通常将extern int GlobalInt
放入.h
文件,然后int GlobalInt
放入.m
文件。
在Swift中你不需要它,因为你没有单独的头文件。只需创建一个全局变量。
如果您正在构建框架,则可能需要在定义中添加访问修饰符,例如public
。
答案 1 :(得分:2)
你需要做的只是在任何类范围之外声明变量......
var globalVar = 0
class MyClass{
//some declarations...
}
为了更好的项目结构,你可以创建一些包含全局变量的文件,比如Globals.swift
,这些变量存储在那里。
在那里,您可以设置您想要的任何属性,不要创建任何类,结构或其他任何属性。这将为您提供良好的服务,因为全局变量将在整个应用程序中可用。这种方法的问题在于它变得混乱,并且当你想在类中声明一些因事故具有相同标识符而不是全局变量的变量时,你会遇到非常糟糕的时间。对于这种情况,最好创建一些单独的对象,它为您保存所有值。我更喜欢单身而不是全局变量,因为你知道你在寻找什么......
通常,尽可能避免全局变量以避免冲突更好。
答案 2 :(得分:1)
要获得更多分色,您可以仅为外部变量添加新文件 像
/* This was previous code, instead of class use enum, because enum is not initialised
import Foundation
public class GlobalVariable{
public static var gv_UserId:Int?
public static var gv_UserName:String = "welcome"
public static var gv_Password:String = "welcome"
}*/
在任何新文件中声明枚举说Enum.swift,并粘贴以下代码
enum GlobalVariableEnum: String {
case userName = "welcome"
case password = "welcome"
}
//现在在必需的类中使用它,如
let userName = GlobalVariableEnum.userName.rawValue
let password = GlobalVariableEnum.password.rawValue
答案 3 :(得分:1)
在AppDelegate中创建int变量
var globalInt = Int()
并且您获得int的值将其值发送到AppDelegate。制作AppDelgate对象如下
let appDelegate = UIApplication.shared.delegate as! AppDelegate
将值传递给app委托变量
self.appDelegate. globalInt = "your Value"
并获取您想要获取的值,如下所示
let value = appDelegate. globalInt as! Int
传递的值
并通过声明app delegate对象并编写以下行
来更新所需的值self.appDelegate. globalInt = "your Value"
答案 4 :(得分:1)
您可以在类的声明之前在初始vc类中添加结构,例如:
import UIKit
struct global {
static var username: String="notset"
}
class ViewController: UIViewController {
...
然后可以使用struct前缀在项目的任何类中使用全局变量。在此示例中:
global.username
答案 5 :(得分:-1)
let string = MyVariables.yourVariable
println("Global variable:\(string)")
更改变量值:
MyVariables.yourVariable = "anotherString"