【问题标题】:How to fix the error "Use of Unresolved identifier" when actually I can access that identifier当我实际上可以访问该标识符时如何修复错误“使用未解析的标识符”
【发布时间】:2018-07-04 18:04:23
【问题描述】:

我有一个定义为 Singleton 的类,我尝试从该类访问 2 个函数,但我收到一个错误,提示找不到该类,但是当我按下 Cmd + 单击时,我能够导航到该类。 我重新启动了 xCode 很多次,我也尝试使用 xCode 10 和 xCode 9 ......同样的错误。我不知道如何解决它。

这是我的代码:

// First Class
class BankAccount {

    private init() {}

    static let bankAccountKey = "Bank Account"
    static let suiteName = "group.com.YourName"

    // Function to set the balance for ShoppingLand Bank
    static func setBalance(toAmount amount: Double) {
        guard let defaults = UserDefaults(suiteName: suiteName) else { return }
        defaults.set(amount, forKey: bankAccountKey)
        defaults.synchronize()
    }

    // Function to check new updates about the balance of ShoppingLand Bank
    static func checkBalance() -> Double? {
        guard let defaults = UserDefaults(suiteName: suiteName) else { return nil }
        defaults.synchronize()
        let balance = defaults.double(forKey: bankAccountKey)
        return balance
    }

    @discardableResult
    static func withdraw(amount: Double) -> Double? {
        guard let defaults = UserDefaults(suiteName: suiteName) else { return nil }
        let balance = defaults.double(forKey: bankAccountKey)
        let newBalance = balance - amount
        setBalance(toAmount: newBalance)
        return newBalance
    }

    @discardableResult
    static func deposit(amount: Double) -> Double? {
        guard let defaults = UserDefaults(suiteName: suiteName) else { return nil }
        let balance = defaults.double(forKey: bankAccountKey)
        let newBalance = balance + amount
        setBalance(toAmount: newBalance)
        return newBalance
    }
}

// Second Class

import Intents

class IntentHandler: INExtension {}

extension IntentHandler: INSendPaymentIntentHandling {
    func handle(intent: INSendPaymentIntent, completion: @escaping (INSendPaymentIntentResponse) -> Void) {

        guard let amount = intent.currencyAmount?.amount?.doubleValue else {
            completion(INSendPaymentIntentResponse(code: .failure, userActivity: nil))
            return
        }

        BankAccount.withdraw(amount: amount)
        completion(INSendPaymentIntentResponse(code: .success, userActivity: nil))
    }
}


extension IntentHandler: INRequestPaymentIntentHandling {
    func handle(intent: INRequestPaymentIntent, completion: @escaping (INRequestPaymentIntentResponse) -> Void) {

        guard let amount = intent.currencyAmount?.amount?.doubleValue else {
            completion(INRequestPaymentIntentResponse(code: .failure, userActivity: nil))
            return
        }
        BankAccount.deposit(amount: amount)
        completion(INRequestPaymentIntentResponse(code: .success, userActivity: nil))

    }
}

这是一个演示:

http://recordit.co/NoXKlT3dw1

感谢您的宝贵时间!

【问题讨论】:

  • 请指出哪些行给你错误。
  • 请点击Demo看看是什么错误。是说找不到类 BankAccount。
  • 我没有点击一些奇怪的链接。您需要更新您的问题以明确指出哪些行导致错误。
  • 使用未解析的标识符“BankAccount”。这是错误。但是当我按 Cmd+Click 时,BankAccount 正在导航到班级。

标签: ios swift swift4 sirikit


【解决方案1】:

确保您的 BankAccount 类文件可用于您的其他目标 -> ShoppingLandSiri。您可以从文件检查器视图中检查它。

【讨论】:

  • 这就是宝贝!回到工作 !非常感谢!
【解决方案2】:

你没有正确设置你的单例。 BankAccount 是一个类,而不是一个实例。单例是类的一个版本,其中只会访问一个实例,但您仍在访问一个实例。您需要添加:

class BankAccount {
    static let shared = BankAccount()
    ...

到您的 BankAccount 类。 shared 属性是实际的单例实例。稍后当您尝试访问单例时,而不是

BankAccount.withdraw(amount: amount)

你想使用那个实例:

BankAccount.shared.withdraw(amount: amount)

【讨论】:

  • 您在提款线上遇到了同样的错误?
猜你喜欢
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
相关资源
最近更新 更多