【问题标题】:@discardableResult is not working as expected in framework@discardableResult 在框架中没有按预期工作
【发布时间】:2018-03-09 17:58:33
【问题描述】:

我在我的框架项目中遇到了一个奇怪的问题。当我尝试在我的框架中调用一个函数时,Swift 3 编译器警告我一个 未使用的结果,即使我在框架中使用 @discardableResult

标记了该函数

这是我的代码 我的cocoa touch framework 项目中的SampleFramework.swift 文件

import Foundation

@discardableResult
public func keychainPerform(key:String) -> String{
    print("success");
    return "aaa";
}

ViewController.swift 文件在single view application swift 项目中

import UIKit
import SampleFramework

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        SampleFramework.keychainPerform(key: "asd") //  Warning: result of call is unused
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



}

我使用其他框架检查了该场景,但 @discardableResult 在所有框架上都运行良好,所以请帮助我找出我做错了什么?

【问题讨论】:

  • 如果您只想删除警告,请尝试let _ = SampleFramework.keychainPerform(key: "asd")
  • 不,我不希望我的框架用户像这样禁止显示此警告
  • 这适用于 Swift 4 吗?
  • 你解决过这个问题吗?我在框架中看到了类似的行为。

标签: ios swift frameworks


【解决方案1】:

我刚刚在 Xcode 12 / Swift 5.3 中偶然发现了同样的问题。

我认为这是编译器中关于接口文件缓存的错误。

如果您之前创建的函数没有@discardableResult 属性,则编译器显然不会在添加后拾取它,除非您进行完全重建,即强制清理构建文件夹和/或删除DerivedData

【讨论】:

    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2014-01-26
    • 2020-03-08
    • 1970-01-01
    • 2021-10-19
    • 2020-03-18
    相关资源
    最近更新 更多