标签: unwrap

使用Swift中的可选解包映射

说我有以下api:

func paths() -> [String?] {
    return ["test", nil, "Two"]
}
Run Code Online (Sandbox Code Playgroud)

我在我需要的方法中使用它[String],因此我不得不使用简单的map函数解开它.我现在正在做:

func cleanPaths() -> [String] {
    return paths.map({$0 as! String})
}
Run Code Online (Sandbox Code Playgroud)

强制转换会导致错误.所以从技术上讲,我需要在paths数组中打开字符串.我在做这件事时遇到了一些麻烦,似乎变得很愚蠢.有人可以帮帮我吗?

dictionary optional swift unwrap

15
推荐指数
2
解决办法
5721
查看次数

"可选类型'String的值?' 没打开;你的意思是用'!' 要么 '?' ?"

我已经很久没学过iOS或Swift了.使用最新的Xcode更新之一,我在计算机上制作的许多应用程序现在似乎都使用了过时的语法.

Xcode通过将它转换为新语法来谈论我们,但通常没有解决任何问题,我有一个新问题.这是我转换语法后第一个应用程序之一的代码.我收到一个错误说:

可选类型'String?'的值 没有打开; 你的意思是用'!' 要么 '?' ?

我知道这一定很简单,但我不知道如何解决它.这是我的代码:

@IBAction func findAge(sender: AnyObject) {
    var enteredAge = Int(age.text)
    if enteredAge != nil {
        var catYears = enteredAge! * 7
        resultLabel.text = "Your cat is \(catYears) in cat years"
    } else {
        resultLabel.text = "Please enter a whole number"
    }
}  
Run Code Online (Sandbox Code Playgroud)

compiler-errors swift unwrap

10
推荐指数
1
解决办法
3万
查看次数

为什么选择“unwrap_or_else”而不是“unwrap_or”?

fn main() {
    let _one = None.unwrap_or("one".to_string());
    let _two = None.unwrap_or_else(|| "two".to_string());
}
Run Code Online (Sandbox Code Playgroud)

有什么特别的原因,人们应该更喜欢unwrap_or_elseunwrap_or

我看到了unwrap_or热切的评论(以这个为例)。这是否意味着unwrap_or总是在程序执行之前评估中的值?并且只有在程序执行到该行时才调用中的FnOnceunwrap_or_else

performance rust unwrap

9
推荐指数
1
解决办法
6287
查看次数

当“T”未实现“Debug”时替代“unwrap()”

我知道x.unwrap()x: Result<T, E>不实现时不起作用EDebug需要unwrap()打印出Err变体以防万一x.is_err(),但它不能。然而,有时,尤其是在测试中,我确实需要掌握其Ok值。我以为x.expect()会成功,因为我是在失败时指定消息的人。然而,由于某种原因,我也不完全理解,expect()需要E: Debug。这意味着我总是最终采取冗长、重复的方式:

   let x_ok = match x {
      Ok(x_ok) => x_ok,
      Err(_) => panic!("Something went horribly wrong!"),
   }
Run Code Online (Sandbox Code Playgroud)

我无法想象这个问题不会有更标准化的解决方案,但我很难找到一个。get_ok_or_panic如果Erra 的类型Result没有实现,如何快速实现Debug

rust unwrap

9
推荐指数
2
解决办法
1394
查看次数

Kotlin在Swift中有相当于Implicitly Unwrapped Optionals吗?

对于像在类的构造函数中未分配的UI元素这样的东西,隐式展开的选项是Swift的一个有用特性,但对于大多数函数可以安全地假设为非null(因为它们将在viewDidLoad中分配) .

例如.

@IBOutlet weak var textView : UITextView! 
Run Code Online (Sandbox Code Playgroud)

是否有Kotlin的等效物,或达到相同效果的变通方法?

optional kotlin unwrap

7
推荐指数
1
解决办法
1053
查看次数

有没有办法检测Swift项目中的强制解包?

有没有办法(通过编译器标志或脚本)检测Swift项目中的强制解包?

我正在考虑这样的事情:

let b = a as! B
let c = a!
a!.method()
Run Code Online (Sandbox Code Playgroud)

例如,不会触发误报var a: A!.

optional swift forced-unwrapping unwrap

6
推荐指数
1
解决办法
418
查看次数

Scala:访问可选对象中的可选值

有没有一种很好的方法来访问Option Object中的Option Value?嵌套的匹配案例导致丑陋的树结构.

所以如果我有例如:

case class MyObject(value: Option[Int])
val optionObject : Option[MyObject] = Some(MyObject(Some(2))
Run Code Online (Sandbox Code Playgroud)

我知道访问该值的唯一方法是:

val defaultCase = 0 //represents the value when either of the two is None
optionObject match {
    case Some(o) => o.value match {
        case Some(number) => number
        case None => defaultCase
    }
    case None => defaultCase
}
Run Code Online (Sandbox Code Playgroud)

这非常难看,因为这个构造只是用于访问一个小的Option值.

我想做的是:

optionObject.value.getOrElse(0)
Run Code Online (Sandbox Code Playgroud)

或者像你可以用Swift做的:

if (val someVal = optionObject.value) {
   //if the value is something you can access it via someVal here
}
Run Code Online (Sandbox Code Playgroud)

Scala中有什么东西能让我很好地处理这些事情吗?

谢谢!

error-handling scala optional forced-unwrapping unwrap

5
推荐指数
1
解决办法
461
查看次数

函数抛出AND返回可选..可以有条件地解开一行?

我正在使用SQLite库,其中查询返回可选值以及可能抛出错误.我想有条件地解包该值,或者如果它返回错误则收到nil.我不完全确定怎么说这个,这段代码会解释,这就是它的样子:

func getSomething() throws -> Value? {
    //example function from library, returns optional or throws errors
}


func myFunctionToGetSpecificDate() -> Date? {
    if let specificValue = db!.getSomething() {
         let returnedValue = specificValue!
         // it says I need to force unwrap specificValue, 
         // shouldn't it be unwrapped already?

         let specificDate = Date.init(timeIntervalSinceReferenceDate: TimeInterval(returnedValue))
         return time
    } else {
         return nil
    }

}
Run Code Online (Sandbox Code Playgroud)

有没有办法避免不得不强行打开那里?在更新到Swift3之前,我没有被迫在这里强行打开包装.

以下是实际代码.只是想从所有条目中获取最新的时间戳:

func getLastDateWithData() -> Date? {
    if let max = try? db!.scalar(eventTable.select(timestamp.max)){

        let time = Date.init(timeIntervalSinceReferenceDate: TimeInterval(max!))

        // …
Run Code Online (Sandbox Code Playgroud)

optional throws swift unwrap

5
推荐指数
1
解决办法
764
查看次数

检查`if let`是否为零

我有一个应用程序,我目前正在使用SwiftKeychainWrapper.下面是代码我有检查,如果retrievedStringnil.但是我还在进入retrievedString: nil控制台.

不应该运行if-let语句中的代码,或者我是否正在使用/理解if-let错误?

在给定的示例中,使用if-let打开可选值的正确方法是什么?

if let retrievedString: String? = KeychainWrapper.stringForKey("username") {
    print("retrievedString: \(retrievedString)")
    //value not nil
} else {
    //Value is nil
}
Run Code Online (Sandbox Code Playgroud)

optional ios swift unwrap

4
推荐指数
1
解决办法
1119
查看次数

忽略NaN的Numpy包装

我有一个长的numpy数组,带有风向记录,unwrap在运行算法来检测数据中的跳跃之前,我试图使用numpy的数组。数据包含NaN,而numpy似乎无法处理此问题。一旦遇到一个NaN,所有随后返回的数据点unwrap也将转换为NaN。有没有解决的办法?

我认为我的问题可以归结为与此处发布的问题相同,但是只能得出结论,该错误与数据中的NaN有关,并且没有提供解决方案。

python numpy unwrap

3
推荐指数
1
解决办法
402
查看次数