说我有以下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数组中打开字符串.我在做这件事时遇到了一些麻烦,似乎变得很愚蠢.有人可以帮帮我吗?
我已经很久没学过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) 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_else了unwrap_or?
我看到了unwrap_or热切的评论(以这个为例)。这是否意味着unwrap_or总是在程序执行之前评估中的值?并且只有在程序执行到该行时才调用中的FnOnce值unwrap_or_else?
我知道x.unwrap()当x: Result<T, E>不实现时不起作用E:Debug需要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?
对于像在类的构造函数中未分配的UI元素这样的东西,隐式展开的选项是Swift的一个有用特性,但对于大多数函数可以安全地假设为非null(因为它们将在viewDidLoad中分配) .
例如.
@IBOutlet weak var textView : UITextView!
Run Code Online (Sandbox Code Playgroud)
是否有Kotlin的等效物,或达到相同效果的变通方法?
有没有办法(通过编译器标志或脚本)检测Swift项目中的强制解包?
我正在考虑这样的事情:
let b = a as! B
let c = a!
a!.method()
Run Code Online (Sandbox Code Playgroud)
例如,不会触发误报var a: A!.
有没有一种很好的方法来访问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中有什么东西能让我很好地处理这些事情吗?
谢谢!
我正在使用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) 我有一个应用程序,我目前正在使用SwiftKeychainWrapper.下面是代码我有检查,如果retrievedString是nil.但是我还在进入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) 我有一个长的numpy数组,带有风向记录,unwrap在运行算法来检测数据中的跳跃之前,我试图使用numpy的数组。数据包含NaN,而numpy似乎无法处理此问题。一旦遇到一个NaN,所有随后返回的数据点unwrap也将转换为NaN。有没有解决的办法?
我认为我的问题可以归结为与此处发布的问题相同,但是只能得出结论,该错误与数据中的NaN有关,并且没有提供解决方案。