iPhone sdk - Удалите все символы за исключением номеров 0-9 от строки [дубликат]

Кроме очевидной разницы [1 129]

  • необходимость объявить значение во время определения для const значения VS readonly могут быть вычислены динамично, но потребность, которая будет присвоена перед выходами конструктора.. после этого это замораживается.
  • 'константа неявно static. Вы используете ClassName.ConstantName нотация для доступа к ним.

существует тонкое различие. Считайте класс определенным в AssemblyA.

public class Const_V_Readonly
{
  public const int I_CONST_VALUE = 2;
  public readonly int I_RO_VALUE;
  public Const_V_Readonly()
  {
     I_RO_VALUE = 3;
  }
}

AssemblyB ссылки AssemblyA и использование эти значения в коде. Когда это компилируется,

  • в случае эти const значение, оно похоже на находить-замену, значение 2 'испеклось в' AssemblyB IL. Это означает это, если завтра я обновлю I_CONST_VALUE к 20 в будущем. AssemblyB все еще имел бы 2, пока я не перекомпилировал его .
  • в случае эти readonly значение, это похоже ref к ячейке памяти. Значение не испеклось в [1 116] IL. Это означает, что, если ячейка памяти обновляется, AssemblyB, получает новое значение без перекомпиляции. Таким образом, если I_RO_VALUE обновляется к 30, только необходимо создать AssemblyA. Все клиенты не должны быть перекомпилированы.

Поэтому, если Вы уверены, что значение константы не изменится, используют const.

public const int CM_IN_A_METER = 100;

, Но если у Вас есть константа, которая может измениться (например, w.r.t. точность).. или когда в сомнении, используйте readonly.

public readonly float PI = 3.14;

Обновление: Aku должен получить упоминание, потому что он указал на это сначала. Также я должен включиться, где я изучил это.. Эффективный C# - Bill Wagner

16
задан Mike Abdullah 11 April 2013 в 19:23
поделиться

1 ответ

Вы используете метод обрезки, что означает, что он смотрит только на внешние края строки. Вы, вероятно, получаете что-то вроде: «555) 555-555» в качестве номера телефона, правильно?

Мне неизвестен метод NS (Mutable) String в строке «replaceOccurrencesOfCharactersInSet: (NSCharacterSet *) set ", и я признаю, что, вероятно, было бы действительно неплохо иметь.

Будучи мной, я бы, вероятно, просто использовал регулярное выражение. Если вы используете RegexKitLite , тогда вы легко можете сделать:

#import "RegexKitLite.h"

NSString * number = @"(555) 555-555 Office";
NSString * strippedNumber = [number stringByReplacingOccurrencesOfRegex:@"[^0-9]" withString:@""];

Это может быть немного излишним, но он сделает именно то, что вы ищете.

FYI: "[^ 0-9 ] "означает" любой символ, кроме 0, 1, 2, 3, 4, 5, 6, 7, 8 или 9 ".

13
ответ дан 30 November 2019 в 15:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: