我应该把函数放在哪里?

Posted

技术标签:

【中文标题】我应该把函数放在哪里?【英文标题】:Where should i put the function? 【发布时间】:2016-08-26 13:39:43 【问题描述】:

我创建了一个函数,它使用UIDevice 检查 iPhone 是否正在充电。我应该在哪里调用该函数,以便它监控整个应用会话的状态? The Function is called "connectivityStatus",目前在viewWillAppear

语言:Swift 3 平台:ios 10(使用 UIDevice)

【问题讨论】:

我敢打赌,你可以收听一个通知,看看充电状态何时发生变化。 请不要使用任何建议的答案。正如丹尼尔正确指出的那样,有一个通知:developer.apple.com/library/ios/documentation/UIKit/Reference/… 【参考方案1】:

Hari 请在 Appdelegate.h 中定义一个函数,并在 Appdelegate.m 中给出该函数的定义。现在您可以像这样 [[Appdelegate appdelegate] "Name of your function"] 一样通过应用程序使用此功能。我希望这将有所帮助。将以下代码粘贴到 Appdelegate.m 中以使用 appdelegate

+(AppDelegate*)appDelegate

    return (AppDelegate*)[UIApplication sharedApplication].delegate;

迅速

class func appDelegate() -> AppDelegate 
return (UIApplication.sharedApplication().delegate as! AppDelegate)
 

【讨论】:

谢谢,请提供 Swift 版本! @Hari - 检查答案 @xxxy2j - 为什么你说喜欢,相信自己,你需要知道你的价值,永远不要问喜欢Pls accept this answers,这取决于提问者【参考方案2】:

或者你可以使用Timer():

// in viewDidAppear()
connectivityStatus()
var timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(YourClassName.function) , userInfo: nil, repeats: true)

//outside viewDidAppear()
func function()
    connectivityStatus()

每 2 秒检查一次状态!希望这会有所帮助!

注意:

如果您决定更频繁地更新它,您可以将值从 timeInterval: 更改为更小的值,但请注意,如果正在进行大量进程,您的应用可能会变慢!

【讨论】:

非常感谢!像魅力一样工作! 我不建议以 0.5 的间隔使用 Timer。这会经常调用该函数并可能会减慢您的应用程序 @penatheboss 确实,使用基于事件的机制(在这种情况下为通知)几乎总是更好的选择。 使用定时器也可以,但时间间隔至少要3个 我知道这不是最佳实践,但只要他想经常更新它并且没有那么多代码,就可以了。我将更新答案,以免过程变得过于混乱和缓慢。感谢您的 cmets!【参考方案3】:

如果您想在整个应用程序生命周期中对其进行监控,请在 AppDelegate.swift

中的以下方法中进行
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    // Override point for customization after application launch.
    return true

【讨论】:

【参考方案4】:

你可以管理类似的东西,

在你的appdelegate

  func connectivityStatus() -> Bool 
    // define your method body here. I assume return type as bool. you can customize as per your need

    return true // or false as per your requirement

现在在你想调用这个函数的任何视图控制器中,你都可以这样做,

  let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate


 appDelegate.connectivityStatus() // it will return bool as per your defination in method in appdelegate

【讨论】:

以上是关于我应该把函数放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

良好实践:API 和 MVC - 我应该将方法/函数与 API 的 SQL 查询放在哪里

我在哪里把我的自定义类和函数放在 Laravel 中

在 django 中,我应该将执行 create_if_missing 或 update_if_exists 函数的方法放在哪里?

你认为我应该把我所有的 php 函数放在一个文件中吗?

我应该把 AutoLayout 代码放在哪里?

我应该把我的 DTO 放在哪里?