Swift3,展开 Optional<Binding>(在 SQLite.swift 中)

Posted

技术标签:

【中文标题】Swift3,展开 Optional<Binding>(在 SQLite.swift 中)【英文标题】:Swift3, unwrapping Optional<Binding> (in SQLite.swift) 【发布时间】:2016-12-19 21:10:05 【问题描述】:

在最优秀的SQLite.swift中,我有

 let stmt = try local.db!.prepare(..)
 for row in stmt 
    for tricky in row 

每个“棘手”都是Optional&lt;Binding&gt;

我知道解开每个棘手的唯一方法是这样

var printable:String = "

if let trickyNotNil = tricky 
    if let anInt:Int64 = trickyNotNil as? Int64 
       print("it's an Int") 
        .. use anInt
        
    if let aString:String = trickyNotNil as? String 
        print("it's a String")
        .. use aString

else 
    tricky is nil, do something else

在示例中,我很确定它只能是 Int64 或 String(或转至 String 的东西);我想人们可能不得不用默认情况来涵盖其中的任何其他可能性。

有没有更快捷的方法?

有没有办法获取Optional&lt;Binding&gt; 的类型

(顺便说一句,特别是关于 SQLite.swift;我可能从 doco 中不知道有一种方法可以“获取 n 列的类型”。这很酷,但是,上一段中的问题仍然存在,一般。)

【问题讨论】:

你可以使用 switch 语句,例如Pattern match and conditionally bind in a single Switch statement ***.com/a/33975661/2303865 正确:你知道,DuncanC 解释的“nil case”非常有用 【参考方案1】:

您可以使用基于类的 switch 语句。这种 switch 语句的示例代码如下所示:

let array: [Any?] = ["One", 1, nil, "Two", 2]

for item in array 
  switch item 
  case let anInt as Int:
    print("Element is int \(anInt)")
  case let aString as String:
    print("Element is String \"\(aString)\"")
  case nil:
    print("Element is nil")
  default:
    break
  

如果需要,您还可以在一个或多个案例中添加 where 子句:

let array: [Any?] = ["One", 1, nil, "Two", 2, "One Hundred", 100]

for item in array 
  switch item 
  case let anInt as Int
       where anInt < 100:
    print("Element is int < 100 == \(anInt)")
  case let anInt as Int where anInt >= 100:
    print("Element is int >= 100 == \(anInt)")
  case let aString as String:
    print("Element is String \"\(aString)\"")
  case nil:
    print("Element is nil")
  default:
    break
  

【讨论】:

以上是关于Swift3,展开 Optional<Binding>(在 SQLite.swift 中)的主要内容,如果未能解决你的问题,请参考以下文章

展开 Optional 值时意外发现 nil

value 不是 nil,而是在展开 Optional 值时意外发现 nil

在 Swift 中播放音乐:在展开 Optional 值时意外发现 nil

Swift 2.0:读取 HealthKit 心率数据 - 在展开 Optional 时意外发现 nil

Swift 2.0:读取 HealthKit 心率数据 - 在展开 Optional 时意外发现 nil

Swift 致命错误:在 segue 上展开 Optional 值时意外发现 nil