I'm trying to make uitableview
with days of the week. First should be always current day. But I have simple problem with import identifier. This is my code:
class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var tableView: UITableView!
//Define Days Of The Week
let calendar = NSCalendar.currentCalendar()
let today = NSDate()
let AddOneDay = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 1,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
let AddTwoDays = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 2,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
let AddThreeDays = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 3,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
let AddFourDays = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 4,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
let AddFiveDays = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 5,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
let AddSixDays = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 6,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
func convertDaysFormater(date: String) -> String {
let daysFormatter = NSDateFormatter()
daysFormatter.dateFormat = "EEEE"
daysFormatter.locale = NSLocale(localeIdentifier: "pl_PL")
let convertedOneDay = daysFormatter.stringFromDate(AddOneDay!)
let convertedTwoDays = daysFormatter.stringFromDate(AddTwoDays!)
let convertedThreeDays = daysFormatter.stringFromDate(AddThreeDays!)
let convertedFourDays = daysFormatter.stringFromDate(AddFourDays!)
let convertedFiveDays = daysFormatter.stringFromDate(AddFiveDays!)
let convertedSixDays = daysFormatter.stringFromDate(AddSixDays!)
return convertedOneDay
return convertedTwoDays
return convertedThreeDays
return convertedFourDays
return convertedFiveDays
return convertedSixDays
}
// Define Array
let textCellIdentifier = "TextCell"
let swiftBlogs = [convertedOneDay, convertedTwoDays, etc...]
Can't put convertedOneDay - 'Use of unresolved identifier' error. Thanks for any help ;)
You have a lot of similar code for example:
let AddOneDay = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 1,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
let AddTwoDays = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 2,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
let AddThreeDays = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 3,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
let AddFourDays = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 4,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
let AddFiveDays = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 5,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
let AddSixDays = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 6,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
Only the variable name and value change for each of these it would be more efficient to story this an in array of NSDate
s. For example:
let futureDates:[NSDate] = {
var futureDates = [NSDate]()
for index in 1 ... 6 // Range starting tomorrow and going up to 6 days
{
let futureDate = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: index,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0))
futureDates.append(futureDate!)
}
return futureDates
}()
This way it would be trivial to change what days you want to look at. You simply change the range to iterate over.
The problem you are running into is you are attempting to use convertedOneDay
outside of its scope. Because you declare convertedOneDay
in convertDaysFormater
it can only be used in that function.
Your convertDaysFormater
function could also be improved. Right now, you are not using the parameter and as Phillip Mills points out once you call return
you exit the function so subsequent returns
are not executed. I propose you change the function to accept one date and return one string like so:
func convertDaysFormatter(date:NSDate) -> String {
let daysFormatter = NSDateFormatter()
daysFormatter.dateFormat = "EEEE"
daysFormatter.locale = NSLocale(localeIdentifier: "pl_PL")
return daysFormatter.stringFromDate(date)
}
We can now use our futureDates
and our convertDaysFormatter
function to generate the swiftBlogs
array you want. By saying something like:
let swiftBlogs:[String] = {
var swiftBlogs = [String]()
for date in futureDates
{
swiftBlogs.append(convertDaysFormatter(date))
}
return swiftBlogs
}()
We just take each date from futureDates
and use convertDaysFormatter
to return the appropriate string that we append to our array. In swift you can say this even more concisely by simply saying:
let swiftBlogs = futureDates.map{convertDaysFormatter($0)}
When I run this code I get that swiftBlogs
is equal to:
["niedziela", "poniedziałek", "wtorek", "środa", "czwartek", "piątek"]