@class vs. #import

Отформатируйте дату в запросе.

var _myModel = from _m in model.ModelSearch(word)
    select new { date = ((DateTime)_m.Date).ToShortDateString() };

Единственная проблема с этим решением заключается в том, что вы не получите никаких результатов, если ANY из значений даты равно null. Чтобы обойти это, вы можете либо поставить условные операторы в свой запрос, прежде чем вы выбираете дату, которая игнорирует дату null, или вы можете настроить запрос для получения всех результатов, а затем пропустить всю эту информацию с помощью цикла foreach и присвоить значение ко всем датам, которые являются нулевыми до того, как вы сделаете свой новый SELECT.

Пример обоих:

var _test = from _t in adc.ItemSearchTest(word)
                        where _t.Date != null
                        select new { date = ((DateTime)_t.Date).ToShortDateString() };

Второй вариант требует другого запроса, чтобы вы могли присваивать значения всем нулям. Это и цикл foreach должны быть перед вашим запросом, который выбирает значения.

var _testA = from _t in adc.ItemSearchTest(word)
                         select _i;

            foreach (var detail in _testA)
            {
                if (detail.Date== null)
                {
                    detail.Date= Convert.ToDateTime("1/1/0001");
                }
            }

Просто идея, которую я нашел более простой, чем все примеры javascript.

704
задан notedible 11 November 2014 в 13:11
поделиться

5 ответов

Если Вы видите это предупреждение:

предупреждение: получатель 'MyCoolClass' является классом переадресации, и соответствующий @interface не может существовать

, Вам нужно к #import файл, но можно сделать это в файле реализации (.m) и использовать @class объявление в заголовочном файле.

@class (обычно) не устраняет необходимость к #import файлы, она просто спускает требование ближе туда, где информация полезна.

, Например

, Если Вы говорите @class MyCoolClass, компилятор знает, что может видеть что-то как:

MyCoolClass *myObject;

Это не должно волноваться ни о чем кроме MyCoolClass, допустимый класс, и это должно зарезервировать комнату для указателя на него (действительно, просто указатель). Таким образом, в Вашем заголовке, @class удовлетворяет 90% времени.

Однако, если когда-нибудь необходимо создавать или доступ myObject участники, необходимо будет сообщить компилятору, каковы те методы. В этой точке (по-видимому, в Вашем файле реализации), Вам будет нужно к #import "MyCoolClass.h", для сообщения дополнительной информации компилятора вне просто, "это - класс".

748
ответ дан Hlung 11 November 2014 в 13:11
поделиться

Обычная практика использует @class в заголовочных файлах (но Вам все еще нужен к #import суперкласс), и #import в файлах реализации. Это избежит любых круговых включений, и это просто работает.

24
ответ дан Steph Thirion 11 November 2014 в 13:11
поделиться

Используйте предописание в заголовочном файле в случае необходимости, и #import заголовочные файлы для любых классов, которые Вы используете в реализации. Другими словами, Вы всегда #import файлы, которые Вы используете в своей реализации, и если необходимо сослаться на класс в заголовочном файле, используете предописание также.

исключение к этому - то, что Вы должны #import класс или формальный протокол, которому Вы наследовались в Вашем заголовочном файле (в этом случае, Вы не должны были бы импортировать его в реализации).

47
ответ дан Abizern 11 November 2014 в 13:11
поделиться

Посмотрите на документацию Языка программирования Objective C относительно ADC

Под разделом по Определению Класса | Интерфейс Класса, который это описывает, почему это сделано:

@class директива минимизирует объем кода, замеченный компилятором и компоновщиком, и является поэтому самым простым способом дать предописание имени класса. Будучи простым, это избегает потенциальных проблем, которые могут идти с импортом файлов, которые импортируют все еще другие файлы. Например, если один класс объявляет переменную экземпляра со статическим контролем типов другого класса, и их два интерфейсных файла импортируют друг друга, никакой класс не может скомпилировать правильно.

я надеюсь, что это помогает.

110
ответ дан Matt Becker 11 November 2014 в 13:11
поделиться

Три простых правила:

  • Только #import суперкласс и принятые протоколы в файлах заголовков (файлы .h ).
  • #import все классы и протоколы, вы отправляете сообщения в реализации ( .m файлы).
  • Перенаправляйте объявления для всего остального.

Если вы делаете предварительное объявление в файлы реализации, то вы, вероятно, делаете что-то не так.

183
ответ дан 22 November 2019 в 21:35
поделиться