Субъективный Си / Говнокод #18781 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
if([error isEqualToString:@"Вероятно, соединение с Интернетом прервано."]
            || [error isEqualToString:@"The Internet connection appears to be offline."]
                || [error isEqualToString:@"Підключення до Інтернету вимкнено."]) {
                                .......

проверка, а не произошла ли крайняя ошибка вследствие обрыва связи.

axelzwei axelzwei, (Updated )

Комментарии (5, +5)

Субъективный Си / Говнокод #18701 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
{
	NSArray *items = ...;
	[items enumerateObjectsUsingBlock:^(Item *item, NSUInteger idx, BOOL *stop) {
		// do some stuff with item

		item = nil;
	}];
}

Строка 6 написана сознательно и повторяется в ряде других методов.

gumbert gumbert, (Updated )

Комментарии (16, +16)

Субъективный Си / Говнокод #18364 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
+ (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х летней давности.

Drenwtc Drenwtc, (Updated )

Комментарии (5, +5)

Субъективный Си / Говнокод #18351 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
- (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;
    }
}

Валидируем введённый номер телефона. Кажется, я нашёл нового Евгения.

krypt krypt, (Updated )

Комментарии (3, +3)

Субъективный Си / Говнокод #18295 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
// 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), &currentChallengeDay);

Как правильно вычислять разницу между двумя NSDate

al_novsky al_novsky, (Updated )

Комментарии (1, +1)

Субъективный Си / Говнокод #18236 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
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.);

И так для каждого элемента интерфейса и каждый раз при смене ориентации - просто тернарный фетишизм.

Psionic Psionic, (Updated )

Комментарии (6, +6)

Субъективный Си / Говнокод #18205 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
/**
*\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;
}

Такой чудо-код встретился в проекте.

EMax EMax, (Updated )

Комментарии (9, +9)

Субъективный Си / Говнокод #18173 Ссылка на оригинал

0

  1. 1
Autoresizing mask -> Autolayout -> Size classes -> "android layout" (на apple watch)

Эволюция "автонастройки" размеров в iOS или что бывает если один раз нормально не сесть и подумать.

Для тех кто не в теме - все вышеперечисленное может быть в одном проекте одновременно.

Gerchicov-bp Gerchicov-bp, (Updated )

Комментарии (3, +3)