我正在寻找这个问题的惯用解决方案.
我正在构建一个valScala(不可变)地图,并希望可选择添加一个或多个项目:
val aMap =
Map(key1 -> value1,
key2 -> value2,
(if (condition) (key3 -> value3) else ???))
Run Code Online (Sandbox Code Playgroud)
如何在不使用var?的情况下完成?什么应该取代????使用+运营商更好吗?
val aMap =
Map(key1 -> value1,
key2 -> value2) +
(if (condition) (key3 -> value3) else ???))
Run Code Online (Sandbox Code Playgroud)
一种可能的解决方案是
val aMap =
Map(key1 -> value1,
key2 -> value2,
(if (condition) (key3 -> value3) else (null, null))).filter {
case (k, v) => k != null && v != null
}
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?
我知道单个感叹号的定义,但两个?
我今天正在编码,编译器"强迫"我再添加一个!我的句子:
mySignal.subscribeNext({
(value: AnyObject!) -> () in
let list: RACSequence = value["myObject"]!!.rac_sequence
...
Run Code Online (Sandbox Code Playgroud)
如果我只使用一个!mark,项目没有编译,给我错误:"可选类型的值'AnyObject?' 没打开;你的意思是用'!' 要么 '?'?" 然后我再添加一个!一切正常.
Swift中两个感叹号的含义是什么?
我想做点什么
foo[OptionsPattern[]] := OptionValue[b]
Options[foo] = {a -> 0, b :> OptionValue[a]};
foo[a -> 1]
Run Code Online (Sandbox Code Playgroud)
让Mathematica给我1,而不是0.有没有更好的方法来做到这一点
foo[OptionsPattern[]] := (
Options[foo] = {a -> 0, b :> OptionValue[a]};
OptionValue[b]
)
foo[a -> 1]
Run Code Online (Sandbox Code Playgroud)
?
首先,foo在每次调用时设置选项都是低效的,特别是如果foo有很多选项的话.
wolfram-mathematica options optional-parameters optional-values
我正在尝试使用多个值创建一个简单的if-let语句.if只有当所有可选变量都是非零时,才应执行该块,并且应将它们分配给仅存在于if块内的新let-vars(常量?),就像正常的单赋值if-let一样.
var a: String? = "A"
var b: String? // nil
if let (m, n) = (a, b) {
println("m: \(m), n: \(n)")
} else {
println("too bad")
}
// error: Bound value in a conditional binding must be of Optional type
// this of course is because the tuple itself is not an Optional
// let's try that to be sure that's the problem...
let mysteryTuple: (String?, String?)? = (a, b)
if let (m, n) …Run Code Online (Sandbox Code Playgroud) tuples parallel-assignment optional-values swift swift-playground
以下代码几乎是Apple Documentation的精确复制品,编译时没有错误:
guard let firstItem = (rawItems! as? Array<Dictionary<String, Any>>)?.first else {
throw AnError()
}
let identityRef = firstItem[kSecImportItemIdentity as String]
as! SecIdentity? // !!!
guard let identity = identityRef else {
throw AnError()
}
Run Code Online (Sandbox Code Playgroud)
标有的行!!!包含强制向下转换,而替换as!为as显然会导致编译错误'Any?' is not convertible to 'SecIdentity?'...确实SecIdentity是一个类,Any甚至可能不是一个类。
我真正无法解释的是以下内容。如果我尝试使代码更安全,请使用此
guard let idenity = firstItem[kSecImportItemIdentity as String] as? SecIdentity
else {
throw AnError()
}
Run Code Online (Sandbox Code Playgroud)
或这个
guard let idenityRef = firstItem[kSecImportItemIdentity as String] as? SecIdentity? …Run Code Online (Sandbox Code Playgroud) 我用快速的语言随处可见,人们使用if语句测试可选值,以便他们可以通过两种方式安全地强制解包:
if optionalValue != .None {
... some code ...
}
Run Code Online (Sandbox Code Playgroud)
要么
if optionalValue != nil {
... some code ...
}
Run Code Online (Sandbox Code Playgroud)
有什么区别,它能以某种方式以某种方式影响我的应用程序/代码吗?什么更好?
是否有一种简洁的方法来组合默认函数参数值和选项,因此当在函数调用中指定参数时,参数采用提供的默认值,但它的值是否为零?
例如:
class MyObj {
var foobar:String
init(foo: String?="hello") {
self.foobar = foo!
}
}
let myObj = MyObj() // standard use of default values - don't supply a value at all
println(myObj.foobar) // prints "hello" as expected when parameter value is not supplied
var jimbob: String? // defaults to nil
...
// supply a value, but it is nil
let myObj2 = MyObj(foo: jimbob) // <<< this crashes with EXC_BAD_INSTRUCTION due to forced unwrap of nil value
println(myObj2.foobar)
Run Code Online (Sandbox Code Playgroud)
...或者是给成员常量/变量默认值的最佳选择,然后只有在为构造函数提供值时才更改它们,如下所示: …
我知道有相同错误的无数问题,但没有一个解决方案似乎有效.
我想制作一个博客阅读器应用程序,用于保存和获取CoreData中的数据.我能够在JSON结果保存到CoreData,但是当我尝试找回它TableView中显示,它崩溃fatal error: unexpectedly found nil while unwrapping an Optional value上线
let entity = NSEntityDescription.entityForName("Blog", inManagedObjectContext:self.managedObjectContext!)
这是我的代码:
import UIKit
import CoreData
var activeItem:String = ""
class CenterViewController: UIViewController,
UIWebViewDelegate, NSFetchedResultsControllerDelegate,
SidePanelViewControllerDelegate {
var detailViewController: DetailViewController? = nil
var managedObjectContext: NSManagedObjectContext? = nil
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var tableview: UITableView!
@IBOutlet weak var webview2: UIWebView!
var delegate: CenterViewControllerDelegate?
// MARK: Button actions
@IBAction func kittiesTapped(sender: AnyObject) {
delegate?.toggleLeftPanel?()
}
@IBAction func puppiesTapped(sender: AnyObject) {
delegate?.toggleRightPanel?()
} …Run Code Online (Sandbox Code Playgroud) 有什么区别:
var title:String? = "Title" //1
var title:String! = "Title" //2
var title:String = "Title" //3
Run Code Online (Sandbox Code Playgroud)
如果我在各方面设置标题并且我被迫以不同的方式展开每个变量,我该怎么说?
如何在可选的前缀之后获取字符串?例:
Expression Result
------------------------
[asdf]xxx => xxx
[foo]bar => bar
[]bla => bla
test => test
Run Code Online (Sandbox Code Playgroud)
[...] 是可选部分。
显然,我需要环顾一下断言。但是我不知道将它设置为可选。
我刚开始使用Swift.所以我创建了一个带有标签,按钮和文本字段的简单应用程序.单击该按钮时,应用程序必须使用文本字段的文本更改标签.
class ViewController: UIViewController {
@IBOutlet weak var textLabel: UILabel!
@IBOutlet weak var textField: UITextField!
@IBAction func updateButton(sender: UIButton) {
textLabel.text = "Hi \(textField.text) "
}
Run Code Online (Sandbox Code Playgroud)
结果是
嗨可选("TextOfTextField")
好的.所以这是一个非常简单的问题.
我希望有一个人可以帮助我.
optional-values ×11
swift ×8
ios ×3
core-data ×1
downcast ×1
immutability ×1
null ×1
optional ×1
options ×1
regex ×1
scala ×1
string ×1
tuples ×1
uitableview ×1