我想知道是否有一种方法可以在可选的上实现计算(computed)属性,它不需要展开或缺省值.为了便于示例,请设想以下场景:

我们有一个UITextField子类,我们想要添加某种验证.让我们假设是否有值(同样,这是出于示例的目的).目前要做到这一点的方法是:

var hasValue: Bool {
    if let value = text {
        return value.isEmpty
    } else {
        return false
    }
}

我试着在Swift documentation 里找了找,但我没能找到这样的东西.有没有人有更好的解决方案?:)

推荐答案

您当然可以:

extension Optional where Wrapped == String {
   var hasValue: Bool {
       return !(self ?? "").isEmpty
   }
}

但是,通常我会避免添加这样的方法,因为它们隐藏了变量是可选的这一事实.我宁愿明确地使用(text ?? "").isEmpty.

Ios相关问答推荐

使用音频单元播放音频流,出现爆裂声

SwiftUI拖动手势和内容拖动时的奇怪行为( skip /卡顿)

如何在react 本机模块中使用Bundle.main.Path()在SWIFT中导入assets资源

Swift-如何通过Case Let访问模型变量

SwiftUI - 搜索栏和导航标题之间的空间太大

SwiftUI 点击列表内不会触发 Select

每次我路由到应用程序的主屏幕时,都无法使组合订阅正常工作

Swift Combine 防止初始值触发接收器并同时防止重复?

iOS SwiftUI - 使用 PhotosPicker 从图库中 Select 图像或视频

AppCenter 错误:/usr/bin/xcodebuild 失败,返回码:65

具有多个目标的应用程序的动态内容

将flutter android项目导入iOS

setNeedsLayout 和 setNeedsDisplay

iOS 中的 [Class new] 和 [[Class alloc] init] 有什么区别?

每次运行后,Xcode 6 都会在 iOS8 模拟器中重命名我的应用程序目录.

iOS 中是否有用于自定义振动的 API?

在原生和 phonegap 之间挣扎,简单的应用需求

@IBDesignable 崩溃代理

iOS:设备旋转后如何运行函数(Swift)

更新字段时,UITextField值已更改未触发