Reputation: 75
i am new in swift how to create common class and return string Here is my code where i do mistake Please help me. This is my nsobject common class
import UIKit
class DayCount: NSObject {
func doSomething(getDate:String) -> String {
let start = "20150601"
let end = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyyMMdd"
var endDateSting:String = dateFormatter.stringFromDate(end)
let startDate:NSDate = dateFormatter.dateFromString(start)!
let endDate:NSDate = dateFormatter.dateFromString(endDateSting)!
let cal = NSCalendar.currentCalendar()
let unit:NSCalendarUnit = .CalendarUnitDay
let components = cal.components(unit, fromDate: startDate, toDate:
endDate, options: nil)
println(components)
let date:String? = (self.timeAgoSinceDate(startDate, numericDates: Bool()))
println(date)
return date!
}
func timeAgoSinceDate(date:NSDate, numericDates:Bool) -> String {
let calendar = NSCalendar.currentCalendar()
let unitFlags = NSCalendarUnit.CalendarUnitMinute |
NSCalendarUnit.CalendarUnitHour | NSCalendarUnit.CalendarUnitDay |
NSCalendarUnit.CalendarUnitWeekOfYear
NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitYear |
NSCalendarUnit.CalendarUnitSecond
let now = NSDate()
let earliest = now.earlierDate(date)
let latest = (earliest == now) ? date : now
let components:NSDateComponents = calendar.components(unitFlags,
fromDate: earliest, toDate: latest, options: nil)
if (components.year >= 2) {
} else if (components.year >= 1){
} else if (components.month >= 2) {
} else if (components.month >= 1){
} else if (components.weekOfYear >= 2) {
} else if (components.weekOfYear >= 1){
} else if (components.day >= 2) {
} else if (components.day >= 1){
} else if (components.hour >= 2) {
} else if (components.hour >= 1){
return "\(components.year) years ago"
if (numericDates){
return "1 year ago"
} else {
return "Last year"
}
return "\(components.month) months ago"
if (numericDates){
return "1 month ago"
} else {
return "Last month"
}
return "\(components.weekOfYear) weeks ago"
if (numericDates){
return "1 week ago"
} else {
return "Last week"
}
return "\(components.day) days ago"
if (numericDates){
return "1 day ago"
} else {
return "Yesterday"
}
return "\(components.hour) hours ago"
if (numericDates){
return "1 hour ago"
} else {
return "An hour ago"
}
} else if (components.minute >= 2) {
return "\(components.minute) minutes ago"
} else if (components.minute >= 1){
if (numericDates){
return "1 minute ago"
} else {
return "A minute ago"
}
} else if (components.second >= 3) {
return "\(components.second) seconds ago"
} else {
return "Just now"
}
return ""
}
}
and my view controller i have get this string like this but its return always error
let getdate = (DayCount.doSomething("sdfsdfsd"))
println("date===== \(getdate)")
The error is "(string)-> string is not convertible to DayCount" i have also Try this
let getdate:String = (DayCount.doSomething("sdfsdfsd"))
println("date===== \(getdate)")
But it always return me error please help me where i do mistake
Upvotes: 0
Views: 1012
Reputation: 2806
let getdate = (DayCount.doSomething("sdfsdfsd"))
won't work because it's not correct syntax. doSomething is a method, DayCount is a class. A method is invoked on an instance variable of a class. eg
var aDayCounter : DayCount
is a way to define a variable of type Daycount. On that type you can then invoke the method
aDayCounter.doSomething("sdfsdfsd")
You can also define Class methods or Type methods as they're called in Swift. the Apple dev site explains this better than I can do:
Upvotes: 1