首页 > 解决方案 > 如何访问编组 iOS [Nativescript]

问题描述

我目前有一个功能插件,但是我无法在 finishCheckout 方法中获取对象

import { Options } from "./mercadopago-px.common";
import * as frameModule from "tns-core-modules/ui/frame";

export class LifeCycleProtocolImpl extends NSObject
    implements PXLifeCycleProtocol {
    public resolve: any;
    public reject: any;

    static ObjCProtocols = [PXLifeCycleProtocol]; // define our native protocalls

    static new(): LifeCycleProtocolImpl {
        return <LifeCycleProtocolImpl>super.new(); // calls new() on the NSObject
    }

    cancelCheckout(): () => void {
        this.reject({
            status: "cancel",
            data: null,
            error: "cancelCheckout"
        });

        return null;
    }
    changePaymentMethodTapped?(): () => void {
        return null;
    }
    finishCheckout(): (result: PXResult) => void {
        this.resolve({
            status: "finishCheckout",
            data: null,
            error: null
        });

        return null;
    }
}

export class MercadopagoPx {
    public start(options: Options): Promise<any> {
        return new Promise((resolve, reject) => {
            let checkout = MercadoPagoCheckout.alloc().initWithBuilder(
                MercadoPagoCheckoutBuilder.alloc()
                    .initWithPublicKeyPreferenceId(
                        options.publicKey,
                        options.preferenceId
                    )
                    .setLanguage(options.language)
            );

            let lifeCycleProtocolDelegate: LifeCycleProtocolImpl = LifeCycleProtocolImpl.new();
            lifeCycleProtocolDelegate.resolve = resolve;
            lifeCycleProtocolDelegate.reject = reject;

            let pxLifeCycleProtocol: PXLifeCycleProtocol = lifeCycleProtocolDelegate;

            checkout.startWithNavigationControllerLifeCycleProtocol(
                frameModule.topmost().ios.controller,
                pxLifeCycleProtocol
            );
        });
    }
}

我的问题是如何访问这里,实际上不能访问,因为我对 linter TS 有问题:

finishCheckout(): (result: PXResult) => void {
        console.dir(result); <---- Here error, can't access to result
        this.resolve({
            status: "finishCheckout",
            data: null,
            error: null
        });

        return null;
    }

试图访问该对象,我不能,因为它检测到该变量不存在,当它存在时,我不知道它是否是访问该属性的方式,或者是否有一种方法可以访问该返回的对象对我来说尝试实施的方法

标签: pluginsnativescript

解决方案


这意味着您正在返回一个finishCheckout具有参数的函数result

finishCheckout(): (result: PXResult) => void {
        console.dir(result); <---- Here error, can't access to result
        this.resolve({
            status: "finishCheckout",
            data: null,
            error: null
        });

        return null;
    }

应该是,

finishCheckout(result: PXResult) {
    console.dir(result); 
    this.resolve({
        status: "finishCheckout",
        data: null,
        error: null
    });

    return null;
}

ifresult应该是finishCheckout.

编辑:

根据类型(finishCheckout(): (p1: PXResult) => void;),该方法没有参数,但它返回一个函数,该函数将以结果作为参数。因此,您无法访问那里的结果。


推荐阅读