我应该把函数放在哪里?
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 查询放在哪里
在 django 中,我应该将执行 create_if_missing 或 update_if_exists 函数的方法放在哪里?