在我的-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法中,我使用此代码返回单元格标签的youtube视频日期:
//Video upload date
NSString *formattedString = [[[self.videos objectAtIndex:indexPath.row] objectForKey:@"uploaded"] stringByReplacingOccurrencesOfString:@"T" withString:@""];
formattedString = [formattedString stringByReplacingCharactersInRange:NSMakeRange(18, 5) withString:@""];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-ddHH:mm:ss"];
NSDate *date = [df dateFromString:formattedString];
[df setDateFormat:@"dd/MM/yyyy"];
NSString *dateStr = [df stringFromDate:date];
cell.date.text = dateStr;
我的方法实现看起来有些混乱,我想知道什么是正确的方法。我应该将此代码保留在原来的位置,还是应该为日期格式设置另一个私有方法?
假设我想制作私人方法。类似的东西:
-(NSString *)formatDateWithString:(NSString *) mystring {
NSString *formattedString = [mystring stringByReplacingOccurrencesOfString:@"T" withString:@""];
formattedString = [formattedString stringByReplacingCharactersInRange:NSMakeRange(18, 5) withString:@""];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-ddHH:mm:ss"];
NSDate *date = [df dateFromString:formattedString];
[df setDateFormat:@"dd/MM/yyyy"];
NSString *dateStr = [df stringFromDate:date];
return dateStr;
}
我应该用-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法写什么?
我对私有方法的论证是[self.videos objectAtIndex:indexPath.row]
但是我失去了如何调用此方法以及在哪个实例变量上?
我需要在我的视图类中创建一个NSString
实例变量,或者我可以在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法中启动NSString实例并在其上执行我的私有方法吗?
答案 0 :(得分:2)
一般的经验法则是,如果您打算重用逻辑,那么将其放入可重用的对象中。这个想法是为了防止重复。在您的情况下,如何创建DateUtils
类并将逻辑放在那里。创建一个类别将是另一种选择。
示例用法:
NSString *youtubeVideoDateStr = [DateUtils formatDateWithString:@"..."];
答案 1 :(得分:1)
这个问题没有真正的“正确”答案。 “看起来凌乱”不是一个可量化的问题,因此无法衡量任何变化的正确性。
如果您可以说代码更容易维护,那么也许您可以证明时间可以重新考虑它。是否会花更多的时间来学习它的功能而不是简化它?