- 1
как оно заебло!!!!! self¿textView?↑:String = ↓? ->void{[ ? !=String¿}¡¡
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
как оно заебло!!!!! self¿textView?↑:String = ↓? ->void{[ ? !=String¿}¡¡
отзыв о том почему свифт это плохо
вас тоже напрягают знаки препинания в свифте?
0
if([error isEqualToString:@"Вероятно, соединение с Интернетом прервано."]
|| [error isEqualToString:@"The Internet connection appears to be offline."]
|| [error isEqualToString:@"Підключення до Інтернету вимкнено."]) {
.......
проверка, а не произошла ли крайняя ошибка вследствие обрыва связи.
0
{
NSArray *items = ...;
[items enumerateObjectsUsingBlock:^(Item *item, NSUInteger idx, BOOL *stop) {
// do some stuff with item
item = nil;
}];
}
Строка 6 написана сознательно и повторяется в ряде других методов.
0
+ (CGFloat)heightForMessageText:(NSString*)message
{
return 83.0 - 35.0 + [Utils heightOfString:message withWidth:600 withFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:17.0f]] + 15.0;
}
Вычисление высоты ячейки
0
+ (NSArray *)orderDBFilePaths:(NSArray *)paths {
NSMutableDictionary *dictionary = [NSMutableDictionary new];
for (NSString *path in paths) {
if ([path hasSuffix:@"-shm"]) {
[dictionary setObject:path forKey:@2];
} else if ([path hasSuffix:@"-wal"]) {
[dictionary setObject:path forKey:@1];
} else {
[dictionary setObject:path forKey:@0];
}
}
return @[dictionary[@0], dictionary[@1], dictionary[@2]];
}
Сортировка фалов *.sqlite* в порядке *.sqlite, *.sqlite-wal, *.sqlite-shm для бэкапа правильного рестора бэкапа в коде 4х летней давности.
0
- (BOOL)validateLoginData
{
self.phone = [Utils phoneFromFormat:[_loginMaskField maskedTextField].text];
if(![Utils validatePhone:self.phone]) {
[_loginMaskField shakeView]; // <-- Здесь автор анимирует вьюху ввода телефона.
return NO;
}
<...>
}
#pragma mark - Telephone mask
+ (NSString *)phoneFromFormat:(NSString *)format
{
int d = 1;
if(format.length == kPhonelength + d) //17
{
const char *cFormatString = [format UTF8String];
char *phoneString = malloc(10 * sizeof(char));
phoneString[0] = cFormatString[5 + d];
phoneString[1] = cFormatString[6 + d];
phoneString[2] = cFormatString[7 + d];
phoneString[3] = cFormatString[9 + d];
phoneString[4] = cFormatString[10 + d];
phoneString[5] = cFormatString[12 + d];
phoneString[6] = cFormatString[13 + d];
// phoneString[7] = cFormatString[15];
// phoneString[8] = cFormatString[16];
// phoneString[9] = '\0';
phoneString[7] = '\0';
NSString *phone = [NSString stringWithUTF8String:phoneString];
free(phoneString);
return phone;
}
else {
return nil;
}
}
+ (BOOL)validatePhone:(NSString *)phone
{
if(phone.length == kPhoneCountDigits)
{
NSString *regexpString = @"^[0-9][0-9]*$";
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexpString];
return [test evaluateWithObject:phone];
}
else {
return NO;
}
}
Валидируем введённый номер телефона. Кажется, я нашёл нового Евгения.
0
// Get current challenge day by calculating the difference between now and challenge start date
double currentChallengeDay = 0;
NSTimeInterval challengeStartDateDifference = [[user currentMiniGame].startDate timeIntervalSinceNow];
NSTimeInterval hourDifference = challengeStartDateDifference / 3600;
modf(fabs(hourDifference / 24), ¤tChallengeDay);
Как правильно вычислять разницу между двумя NSDate
0
openUTButton.frame = CGRectMake(SCREEN_WIDTH - (IS_IPAD ? 225. : 120.) - (IS_IPAD ? 40. : 20),
IS_IPAD ? 40. : 20.,
IS_IPAD ? 225 : 120.,
IS_IPAD ? 60. : 35.);
И так для каждого элемента интерфейса и каждый раз при смене ориентации - просто тернарный фетишизм.
0
/**
*\brief isinteger
*isinteger function will check if the NSString is a number or not
* \Param NSSting*
* \return true or false
*/
bool isinteger(NSString* theString)
{
int myInt;
NSScanner *theScanner = [NSScanner scannerWithString:theString];
if ([theScanner scanInt:&myInt] && [theScanner isAtEnd] )
return true;
else
return false;
}
Такой чудо-код встретился в проекте.
0
Autoresizing mask -> Autolayout -> Size classes -> "android layout" (на apple watch)
Эволюция "автонастройки" размеров в iOS или что бывает если один раз нормально не сесть и подумать.
Для тех кто не в теме - все вышеперечисленное может быть в одном проекте одновременно.