Если вы создаете массив с помощью изменчивости, а затем хотите вернуть неизменяемую версию, вы можете просто вернуть изменяемый массив как «NSArray» через наследование.
- (NSArray *)arrayOfStrings {
NSMutableArray *mutableArray = [NSMutableArray array];
mutableArray[0] = @"foo";
mutableArray[1] = @"bar";
return mutableArray;
}
Если вы «доверяете» вызывающей стороне обрабатывать (технически все еще изменяемый) возвращаемый объект как неизменяемый NSArray, это более дешевый вариант, чем [mutableArray copy]
.
Чтобы определить, может ли он изменить полученный объект, получатель сообщения должен полагаться на формальный тип возвращаемого значения. Если он получает, например, объект массива, типизированный как неизменяемый, он не должен пытаться изменить его . Неприемлемой практикой программирования является определение, является ли объект изменчивым, основываясь на принадлежности к классу.
Описанная выше практика обсуждается более подробно здесь:
Если я правильно понимаю ваш вопрос, вы можете сделать это с помощью конструктора Date следующим образом
new Date(year, month, day, hours, minutes, seconds, milliseconds)
Все аргументы в виде целых чисел
var getDateFromDayNum = function(dayNum, year){
var date = new Date();
if(year){
date.setFullYear(year);
}
date.setMonth(0);
date.setDate(0);
var timeOfFirst = date.getTime(); // this is the time in milliseconds of 1/1/YYYY
var dayMilli = 1000 * 60 * 60 * 24;
var dayNumMilli = dayNum * dayMilli;
date.setTime(timeOfFirst + dayNumMilli);
return date;
}
// OUTPUT OF DAY 232 of year 1995
var pastDate = getDateFromDayNum(232,1995)
console.log("PAST DATE: " , pastDate);
ПРОШЕДШАЯ ДАТА: вс 20 августа 1995 г. 09:47:18 GMT-0400 (EDT)
У вас есть несколько вариантов:
Если вы используете стандартный формат, вы можете сделать что-то вроде:
new Date(dateStr);
Если вы предпочитаете быть в безопасности, вы может сделать:
var date, timestamp;
try {
timestamp = Date.parse(dateStr);
} catch(e) {}
if(timestamp)
date = new Date(timestamp);
or simply,
new Date(Date.parse(dateStr));
Или, если у вас произвольный формат, разбить строку / разобрать ее на единицы и сделать:
new Date(year, month - 1, day)
Пример последнего:
var dateStr = '28/10/2010'; // uncommon US short date
var dateArr = dateStr.split('/');
var dateObj = new Date(dateArr[2], parseInt(dateArr[1]) - 1, dateArr[0]);