Objective-C 辅助方法
Objective-C Helper Methods
我很擅长 Swift 但对 objective-C 还是陌生。当用户点击警报视图上的按钮时,需要在接下来的 24 hours.Code 中禁用该按钮,下面显示的是一种辅助方法,它将 key:userId, value:timestamp
存储在 NSUserDefaults
中 - 我从未真正使用过。我有一些顾虑。
我的辅助方法在一个只有 class 方法的 class 中,所以即使我希望我的辅助方法是私有的,它也不能因为它在 class 方法中被调用。对如何从其他对象隐藏这一点感到困惑。
更好的逻辑程序?嵌套的 if 语句看起来很难看,如果我不记得它的话可能很难阅读。
最好的做法是只复制 alertAction
输入或使用 inout,因为我只是根据逻辑启用或禁用按钮。
更好的方法名称?它的目的是 enable/disable 基于关闭逻辑警告控制器,并存储在 NSUserDefaults 中。 configXXX 看起来很通用。
提前致谢。
+ (UIAlertAction *)configureAlertAction:(UIAlertAction *)alertAction
forUser:(id<BaseUser>)user {
/// Check User defaults to see if current user has reported this user already.
/// if not: store userID and timestamp 24 hours out in defaults and enable alert action.
/// If so, disable action.
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
UIAlertAction *modifiedAlertAction = alertAction;
double currentDate = [[NSDate date] timeIntervalSince1970];
double previousDate = [standardDefaults doubleForKey:user.userId];
if (previousDate) {
if (previousDate > currentDate) {
// remove from userdefaults..
[standardDefaults removeObjectForKey:user.userId];
// enable alert
[modifiedAlertAction setEnabled:YES];
} else if (previousDate > currentDate) {
[modifiedAlertAction setEnabled:NO];
}
} else {
// store in NSuserdefaults
[modifiedAlertAction setEnabled:YES];
double expirationDate = currentDate + 86400;
[standardDefaults setDouble:expirationDate forKey:user.userId];
}
return modifiedAlertAction;
}
针对您的问题
- Objective-C 中并没有真正的 "private method"。您可以在此处了解更多信息 Best way to define private methods for a class in Objective-C
如果你不喜欢嵌套的 if 语句,这是我的建议
+ (UIAlertAction *)configureAlertAction:(UIAlertAction *)alertAction
forUser:(id<BaseUser>)user {
/// Check User defaults to see if current user has reported this user already.
/// if not: store userID and timestamp 24 hours out in defaults and enable alert action.
/// If so, disable action.
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
double currentDate = [[NSDate date] timeIntervalSince1970];
double previousDate = [standardDefaults doubleForKey:user.userId];
if (!previousDate) {
// store in NSuserdefaults
[alertAction setEnabled:YES];
double expirationDate = currentDate + 86400;
[standardDefaults setDouble:expirationDate forKey:user.userId];
return alertAction;
}
BOOL shouldEnableAlert = previousDate > currentDate;
if (shouldEnableAlert) {
// remove from userdefaults..
[standardDefaults removeObjectForKey:user.userId];
}
[alertAction setEnabled:shouldEnableAlert];
return alertAction;
}
- 我认为您不必复制警报,因为我只是根据逻辑启用或禁用按钮。您不需要其他警报。
- 我觉得这个方法名还可以。
我很擅长 Swift 但对 objective-C 还是陌生。当用户点击警报视图上的按钮时,需要在接下来的 24 hours.Code 中禁用该按钮,下面显示的是一种辅助方法,它将 key:userId, value:timestamp
存储在 NSUserDefaults
中 - 我从未真正使用过。我有一些顾虑。
我的辅助方法在一个只有 class 方法的 class 中,所以即使我希望我的辅助方法是私有的,它也不能因为它在 class 方法中被调用。对如何从其他对象隐藏这一点感到困惑。
更好的逻辑程序?嵌套的 if 语句看起来很难看,如果我不记得它的话可能很难阅读。
最好的做法是只复制
alertAction
输入或使用 inout,因为我只是根据逻辑启用或禁用按钮。更好的方法名称?它的目的是 enable/disable 基于关闭逻辑警告控制器,并存储在 NSUserDefaults 中。 configXXX 看起来很通用。
提前致谢。
+ (UIAlertAction *)configureAlertAction:(UIAlertAction *)alertAction
forUser:(id<BaseUser>)user {
/// Check User defaults to see if current user has reported this user already.
/// if not: store userID and timestamp 24 hours out in defaults and enable alert action.
/// If so, disable action.
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
UIAlertAction *modifiedAlertAction = alertAction;
double currentDate = [[NSDate date] timeIntervalSince1970];
double previousDate = [standardDefaults doubleForKey:user.userId];
if (previousDate) {
if (previousDate > currentDate) {
// remove from userdefaults..
[standardDefaults removeObjectForKey:user.userId];
// enable alert
[modifiedAlertAction setEnabled:YES];
} else if (previousDate > currentDate) {
[modifiedAlertAction setEnabled:NO];
}
} else {
// store in NSuserdefaults
[modifiedAlertAction setEnabled:YES];
double expirationDate = currentDate + 86400;
[standardDefaults setDouble:expirationDate forKey:user.userId];
}
return modifiedAlertAction;
}
针对您的问题
- Objective-C 中并没有真正的 "private method"。您可以在此处了解更多信息 Best way to define private methods for a class in Objective-C
如果你不喜欢嵌套的 if 语句,这是我的建议
+ (UIAlertAction *)configureAlertAction:(UIAlertAction *)alertAction forUser:(id<BaseUser>)user { /// Check User defaults to see if current user has reported this user already. /// if not: store userID and timestamp 24 hours out in defaults and enable alert action. /// If so, disable action. NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; double currentDate = [[NSDate date] timeIntervalSince1970]; double previousDate = [standardDefaults doubleForKey:user.userId]; if (!previousDate) { // store in NSuserdefaults [alertAction setEnabled:YES]; double expirationDate = currentDate + 86400; [standardDefaults setDouble:expirationDate forKey:user.userId]; return alertAction; } BOOL shouldEnableAlert = previousDate > currentDate; if (shouldEnableAlert) { // remove from userdefaults.. [standardDefaults removeObjectForKey:user.userId]; } [alertAction setEnabled:shouldEnableAlert]; return alertAction; }
- 我认为您不必复制警报,因为我只是根据逻辑启用或禁用按钮。您不需要其他警报。
- 我觉得这个方法名还可以。