如何轻松地将元素添加到字典中的数组?它总是抱怨could not find member 'append'或could not find an overload for '+='
var dict = Dictionary<String, Array<Int>>()
dict["key"] = [1, 2, 3]
// all of these fail
dict["key"] += 4
dict["key"].append(4) // xcode suggests dict["key"].?.append(4) which also fails
dict["key"]!.append(4)
dict["key"]?.append(4)
// however, I can do this:
var arr = dict["key"]!
arr.append(4) // this alone doesn't affect dict because it's a value type (and was copied)
dict["key"] = arr
Run Code Online (Sandbox Code Playgroud)
如果我只是将数组分配给var,修改它然后重新分配给dict,我不会复制所有内容吗?这不会有效也不优雅.
使用iOS游乐场设置如下:
import UIKit
import SpriteKit
import XCPlayground
let s = CGSize(width: 300, height: 300)
let f = CGRect(origin: CGPointZero, size: s)
let view = SKView(frame: f)
let scene = SKScene(size: s)
scene.backgroundColor = SKColor.redColor()
view.presentScene(scene)
XCPShowView("main view", view)
Run Code Online (Sandbox Code Playgroud)
我在控制台中得到这个:
2014-09-04 17:02:13.358 SpriteKitBETA7[2009:20695] Error sending deferral props: 0x10000003
Run Code Online (Sandbox Code Playgroud)
助手编辑器中有一个"主视图"框,但它不显示任何内容.这个完全相同的代码(import Cocoa而不是import UIKit)在OSX操场上完美运行.我知道我可以在OSX游乐场测试一些东西(虽然在iOS上更方便,因为我不想使用Yosemite,但我确实有iOS7 SDK)并且复制粘贴到我的项目中,但是我想知道是否有人理解这里发生了什么.
众所周知,没有内置函数可以在javascript中从数组中删除重复项.我注意到这也缺少jQuery(它只有DOM选择的独特功能),我发现的最常见的片段检查整个数组及其中每个元素的一个子集(我认为效率不高),如:
for (var i = 0; i < arr.length; i++)
for (var j = i + 1; j < arr.length; j++)
if (arr[i] === arr[j])
//whatever
Run Code Online (Sandbox Code Playgroud)
所以我自己做了:
function unique (arr) {
var hash = {}, result = [];
for (var i = 0; i < arr.length; i++)
if (!(arr[i] in hash)) { //it works with objects! in FF, at least
hash[arr[i]] = true;
result.push(arr[i]);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何其他算法被认为是最适合这种情况的(或者如果你看到任何明显的缺陷可以修复),或者,当你在javascript中需要它时你会做什么(我知道jQuery不是只有框架和其他一些可能已经涵盖了这一点).
我正在尝试使用多个值创建一个简单的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
我已经看过很多片段:对于像阴影这样简单的东西来说太复杂了,需要子类化UIView和使用quartz2d调用,否则我无法让它们工作.
我只是想在一个视图上做这个我作为子视图添加到另一个视图(子视图取自另一个viewController我只是分配 - 我知道这可能不太好但是很好),没有IB或任何东西.什么是最简单/最容易接受的方式?如果我想让它在iOS 4上运行会有所不同吗?
我正在将一些 HTML 转换NSAttributedString为主线程上的an (Apple 告诉您的方式)。这需要一些时间,然后它会继续执行块的其余部分。
现在,如果另一个块也排队在主线程中运行(例如在从 HTTP 请求获得响应之后),我希望它在其他所有事情都完成,但事实并非如此:它们并行运行,好像他们在不同的线程上。我确实在各处放置了断言,以确保它在主线程上。
我做了一个实验“单视图应用程序”项目来测试这个,文件包含一个很长的 html 字符串<p>lorem</p> ipsum <b>dolor</b> <i><u>sit</u> amet</i>和一个带有以下代码的视图控制器:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
dispatchStuff()
for _ in 0..<10 {
// slowOperation()
parseHTML()
}
}
func dispatchStuff() {
for i in 0..<10 {
let wait = Double(i) * 0.2
DispatchQueue.main.asyncAfter(deadline: .now() + wait) {
assert(Thread.isMainThread, "not main thread!")
print(" dispatched after \(wait) seconds")
}
}
}
// just loads a …Run Code Online (Sandbox Code Playgroud) swift ×4
arrays ×2
ios ×2
algorithm ×1
cocoa ×1
concurrency ×1
dictionary ×1
html ×1
javascript ×1
shadow ×1
sprite-kit ×1
syntax ×1
tuples ×1
uiview ×1
unique ×1
xcode ×1