When I run the MyApiCaller my instance of MyApiCaller calls the deinit and gets deallocated. However when I run the UserApi instance, I've called test in this example the UserApi instance's deinit does not run. What is the difference between these two pieces of code?
// MyApiCaller starts here
class MyApiCaller {
var gotData: Bool = false
func getTodos() {
func test(data: Data?, resp: URLResponse?, err: Error?) {
guard let todos = data else {
print("No data")
return
}
self.gotData = true
print("Got data \(self.gotData) \(todos)")
}
let url = URL(string: "https://jsonplaceholder.typicode.com/todos")
URLSession.shared.dataTask(with: url!, completionHandler: test)
.resume()
print("getTodos complete")
}
deinit {
print("MyApiCaller is being deinitialized")
}
}
var caller: MyApiCaller? = MyApiCaller()
caller?.getTodos()
caller = nil
// UserApi starts here
class UserApi: BaseApi {
let domainRoot: String
let encoder: JSONEncoder
let decoder: JSONDecoder
init(domainRoot: String, encoder: JSONEncoder, decoder: JSONDecoder) {
self.domainRoot = domainRoot
self.encoder = encoder
self.decoder = decoder
}
deinit {
print("UserApi is deinit")
}
fileprivate static var people: [User] = [
User(userName: "mrglasses"),
User(userName: "longhair"),
User(userName: "mylady"),
]
func currentLoggedInUser() -> User? {
return UserApi.people[1]
}
func getFollowing() {
let url = URL(string: "http://127.0.0.1:8080/users")
URLSession.shared.dataTask(with: url!) { (data, resp, err) in
guard let data = data else {
print("getFollowing data is nil")
return
}
do {
let followingUsers = try self.decoder.decode([User].self, from: data)
//callback(followingUsers)
} catch {
print("getFollowing decode failed")
}
print("closure is ended")
}
.resume()
}
func addPerson(person: User) {
UserApi.people.append(person)
}
func updatePerson(person: User) {
var foundPerson = UserApi.people.first { p in
p.id == person.id
}
foundPerson?.userName = person.userName
}
}
var test: UserApi? = UserApi(domainRoot: "http://127.0.0.1:8080", encoder: JSONEncoder(), decoder: JSONDecoder())
currentUser = test?.currentLoggedInUser()
test?.getFollowing()
test = nil