Alamofire忽略设置/处理数据的闭包

时间:2018-12-12 08:52:17

标签: ios swift alamofire

我正在使用Alamofire对虚拟数据源https://jsonplaceholder.typicode.com/posts执行网络请求并将其呈现在我的应用程序中。

我有一个名为NetworkingClient.swift的文件,该文件将大部分逻辑抽象出来并允许重用。

public class NetworkingClient {
    typealias WebServiceResponse = ([[String: Any]]?, Error?) -> Void

    func execute(_ url: URL, completion: @escaping WebServiceResponse) {
        Alamofire.request(url).validate().responseJSON { response in
            print(response)
            if let error = response.error {
                completion(nil, error)
            } else if let jsonArray = response.result.value as? [[String: Any]] {
                completion(jsonArray, nil)
            } else if let jsonDict = response.result.value as? [String: Any] {
                completion([jsonDict], nil)
            }
        }
    }
}

我在主视图控制器文件中的设置函数中调用execute

func setUpView() {
        let networkingClient = NetworkingClient()
        let posts_endpoint = "https://jsonplaceholder.typicode.com/posts"
        let posts_endpoint_url = URL(string: TEST_URL_STRING)
        networkingClient.execute(posts_endpoint_url) { (json, error) in
            if let error = error {
                print([["error": error]])
            } else if let json = json {
                print(json)
            }
        }
}

我在viewDidLoad()下的super.viewDidLoad()中称呼它

我在response in闭包中设置了断点,但我无法触发其中的任何一个,实际上,我认为它完全跳过了整个过程,我也不知道为什么。

我正在关注this youtube video,该视频指南的操作完全相同,只是他们的请求通过了。

我想念什么?

我正在使用在iOS 12.1上运行的Swift 4,XCode 10,我的AlamoFire版本是4.7

1 个答案:

答案 0 :(得分:0)

这都是关于异步东西的。您正在使用import { Component, Output, EventEmitter } from '@angular/core'; @Component({ selector: 'app-useparent-checkbox', template: ` <input type="checkbox" (change)="changeChecked($event.currentTarget.checked)">` }) export class UseparentCheckboxComponent { @Output() toggle = new EventEmitter<boolean>(); changeChecked(isChecked: boolean) { this.toggle.emit(isChecked); } } 线程在let comp: UseparentCheckboxComponent; let fixture: ComponentFixture<UseparentCheckboxComponent>; beforeEach(() => { TestBed.configureTestingModule({ imports: [ FormsModule ], declarations: [ UseparentCheckboxComponent ], }); fixture = TestBed.createComponent(UseparentCheckboxComponent); comp = fixture.componentInstance; }); it ('should send true when selected', fakeAsync(() => { const inputDe = fixture.debugElement.query(By.css('input')); const inputEl = inputDe.nativeElement; expect(inputEl.checked).toBeFalsy(); let result; comp.toggle.subscribe((res: boolean) => { console.log('result', res); result = res; }); inputDe.triggerEventHandler('change', new Event('change')); tick(); expect(result).toBe(true); })); 函数中声明NetworkingClient对象和Alamofire来做东西。因此,setupView的执行时间不是清除后,.background从内存中取消分配,它的所有对象都包括networkingClient.execute。为了防止这种情况,只需在函数外部声明setUpView