Лучше, чем сумасшедшее огромное Regex (предполагая, что это для проверки, а не сканирования):
require 'date'
def valid_date?( str, format="%m/%d/%Y" )
Date.strptime(str,format) rescue false
end
И как редакционная статья в сторону: Eww! Зачем вам использовать такой ужасно разбитый формат даты? Перейдите для ISO8601, YYYY-MM-DD
, который является действующим международным стандартом, имеет последовательный порядок частей и также сортирует лексикографически.
В вашем файле .m вы можете объявить переменную как статическую:
static ClassName *variableName = nil;
Затем вы можете инициализировать ее с помощью метода + (void) initialize
.
Обратите внимание, что это обычная статическая переменная C, которая не является статической в том смысле, в каком ее считают Java или C #, но дает аналогичные результаты.
Как сказано в pgb, нет «переменных класса», только «переменные экземпляра». Метод objective-c делать переменные класса - это статическая глобальная переменная внутри файла .m класса. "Static" гарантирует, что переменная не может использоваться вне этого файла (т.е. она не может быть extern).
В вашем файле .m объявите глобальную переменную файла:
static int currentID = 1;
, затем в своей подпрограмме инициализации укажите, что:
- (id) init
{
self = [super init];
if (self != nil) {
_myID = currentID++; // not thread safe
}
return self;
}
или, если ее необходимо изменить в другое время (например, в вашем методе openConnection), а затем увеличьте его там. Помните, что он не является потокобезопасным как есть, вам нужно будет выполнить синхронизацию (или еще лучше использовать атомарное добавление), если могут возникнуть какие-либо проблемы с потоками.
Описание проблемы :
Одна альтернатива :
Имитируйте поведение переменной класса с помощью функций Objective-C
Объявите / определите статическую переменную внутри classA. m, поэтому он будет доступен только для методов classA (и всего, что вы помещаете в classA.m).
Перезаписать метод инициализации класса NSObject, чтобы инициализировать только один раз статическую переменную экземпляром ClassB.
Вы будете интересно, зачем мне перезаписывать метод инициализации NSObject. В документации Apple по этому методу есть ответ: «Среда выполнения отправляет инициализацию каждому классу в программе ровно один раз непосредственно перед классом, или любому классу, который унаследован от него, отправляется первое сообщение из программы. (Таким образом, метод не может быть вызван, если класс не используется.) ".
Не стесняйтесь использовать статическую переменную в любом методе класса / экземпляра ClassA.
Пример кода :
файл: classA.m
static ClassB *classVariableName = nil;
@implementation ClassA
...
+(void) initialize
{
if (! classVariableName)
classVariableName = [[ClassB alloc] init];
}
+(void) classMethodName
{
[classVariableName doSomething];
}
-(void) instanceMethodName
{
[classVariableName doSomething];
}
...
@end
Ссылки :