Swift 中全局变量和函数的最佳实践是啥?

Posted

技术标签:

【中文标题】Swift 中全局变量和函数的最佳实践是啥?【英文标题】:What is best practice for global variables and functions in Swift?Swift 中全局变量和函数的最佳实践是什么? 【发布时间】:2015-02-27 13:19:59 【问题描述】:

我用几个(15-25 个不同的 swigft 文件为每个视图编写一个应用程序)编写了一个应用程序。 我将在每个视图控制器中使用一些变量和函数。 启用代码重用的最佳做法是什么?

例如,我需要与第一个请求是访问令牌的服务器通信,我想这个请求可能是一个设置全局变量(访问令牌)的全局函数。然后将其用于更具体的请求。

我开始在 appdelegate 文件中放置很多全局常量,在 Struct 中这样做有问题吗?

图书馆API.swift 导入 UIKit 导入核心数据

class LibraryAPI: NSObject

let managedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext
private var loginD: LoginDetails
private var isOnline: Bool

class var sharedInstance: LibraryAPI

    struct Singleton
    
        static let instance = LibraryAPI()
    
    return Singleton.instance

override init()

    super.init()

func getIsOnline() -> Bool

    return isOnline

func setIsOnline(onlineStatus: Bool)

    isOnline = onlineStatus

func getLoginDetails() -> LoginDetails

    return loginD

func setLoginDetails(logindet: LoginDetails)

    loginD = logindet


// Execute the fetch request, and cast the results to an array of objects
if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [LoginDetails] 
   setLoginDetails(fetchResults[0])  

【问题讨论】:

对此没有一个答案。访问令牌的示例可能非常适合存储在钥匙串中而不是变量中,或者它可以是处理您的 api 的数据控制器中的局部变量等。 【参考方案1】:

你应该避免使用全局变量

取决于你拥有什么/你需要做什么,你可以:

在第一次调用时创建一个类并创建一个实例。然后,您可以通过您的视图传递对象 (prepareForSegue)。但这仍然可以重复实施; 创建一个只实例化一次并且可以从任何地方访问的单例类(有些人认为单例是一种不好的做法); 使用NSUserDefaults存储字符串; 以某种方式保存您的数据 (CoreData, ...)。

【讨论】:

你有单例应用的例子吗?我特别怀疑如何建立连接和使用核心数据。 这是一个我用来播放声音的单例:pastebin.com/JPzaLhZd(对不起语法着色)。要使用它,您只需执行以下操作:例如 SoundPlayer.sharedInstance.playSound()(当然您还可以访问属性而不仅仅是方法)。 这可要了我的命 :-) 请您看一下问题中的更新代码。我从 LibraryAPI 类中检索属性没有问题。但是我应该在哪里以及如何将变量/属性连接到它们在核心数据中的对应项?如果有请举例说明。【参考方案2】:

你可以这样做

用户.swift

import Foundation
import UIKit

class User: NSObject 
    var name: String = ""

    func getName() -> String
        name = "Nurdin"
        return name
    


ViewController.swift

import Foundation
import UIKit

let instanceOfUser = User()
println(instanceOfUser.getName()) // return Nurdin

【讨论】:

以上是关于Swift 中全局变量和函数的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

全局变量和const定义是啥?

Swift-Swift中的全局变量和函数的创建

何时在 Swift 中使用全局变量

在 SQL Server 中创建和管理全局 Procs 和 UDF 的最佳方法是啥?

Swift 风格:函数返回您需要的类型的可选类型以便继续,处理此问题的最佳实践是啥?

Lambda 函数的最佳实践