我根本不知道这是否可行,但它会让我免受很多压力和糟糕的代码.是否有可能在阵列更新时进行监控?例如,方法A将数组更改a=[1,2,3]为a=[1,2,3,4],是否有可能在a更新时触发某种委托?
我有一个NSSet of Strings,我想把它转换成[String].我怎么做?
我正在使用Apple的新Metal框架编写iOS应用程序.我有一个Matrix4对象数组(参见Ray Wenderlich的教程),我需要通过MTLDevice.newBufferWithLength()方法传入着色器.Matrix4对象正在利用Apple的GLKit(它包含一个GLKMatrix4对象).
我正在利用GPU调用实例化.
我稍后会将其更改为一个结构,其中包含每个实例的更多数据(不仅仅是Matrix4对象).
如何有效地将[Matrix4]对象数组复制到此缓冲区中?
有一个更好的方法吗?再次,我将扩展它以使用未来更多数据的结构.
以下是我的代码的子集:
let sizeofMatrix4 = sizeof(Float) * Matrix4.numberofElements()
// This returns an array of [Matrix4] objects.
let boxArray = createBoxArray(parentModelViewMatrix)
let sizeOfUniformBuffer = boxArray.count * sizeOfMatrix4
var uniformBuffer = device.newBufferWithLength(sizeofUniformBuffer, options: .CPUCacheModeDefaultCache)
let bufferPointer = uniformBuffer?.contents()
// Ouch - way too slow. How can I optimize?
for i in 0..<boxArray.count
{
memcpy(bufferPointer! + (i * sizeOfMatrix4), boxArray[i].raw(), sizeOfMatrix4)
}
renderEncoder.setVertexBuffer(uniformBuffer, offset: 0, atIndex: 2)
Run Code Online (Sandbox Code Playgroud)
注意:boxArray [i] .raw()方法在Objective-C代码中定义如下:
- (void *)raw {
return glkMatrix.m; …Run Code Online (Sandbox Code Playgroud) 下面代码的目标是这样 - 从调用的parse.com类中获取所有对象OnlineUsers,然后在0和之间找到一个RANDOM数results.count,然后使用该对象.
问题是,当我尝试将对象放在位置时results[randomNumber],我得到下面的错误.如果我results[randomNumberCast]在下面尝试,我会得到同样的错误.
我怎么解决这个问题?
func findRandomOnlineUser() {
if PFUser.currentUser() != nil {
var user1 = PFUser.currentUser()
var user2 = PFUser()
//find user2, i.e. some user who is online right now
//Showing OnlineUsers only
let onlineUsersQuery = PFQuery(className: "OnlineUsers")
onlineUsersQuery.findObjectsInBackgroundWithBlock({ (results:[AnyObject]?, error:NSError?) -> Void in
if results!.count > 0 {
self.mLog.printToLog("launchChatwithRandomUser() -- There are more than zero objects in OnlineUsers")
//help: http://stackoverflow.com/questions/26770730/apple-swift-placing-a-variable-inside-arc4random-uniform
let randomNumber = arc4random_uniform(UInt32(results!.count))
var randomNumberCast = Int(randomNumber) …Run Code Online (Sandbox Code Playgroud) x 是一个包含一个名为point的数组的对象.
x实现下标运算符,这样你就可以做一些事情,比如x[i]得到数组的第i个元素(类型为T,通常是Int或Double).
这就是我想要做的:
x[0...2] = [0...2]
Run Code Online (Sandbox Code Playgroud)
但是我收到的错误ClosedInterval<T>是无法转换为Int/Double.
EDIT1:
这是我的对象x:
let x = Point<Double>(dimensions:3)
Run Code Online (Sandbox Code Playgroud)
对于踢腿和咯咯:定义x为[1.0,2.0,0.0]
我可以n通过获得第一个元素x[0...2].
我想知道的是如何一举更新x [0 ... 2]以保持[0.0,0.0.0.0].直觉上,我想做x[0...2] = [0...2].这在答案中可以看出不起作用.我想在x没有迭代的情况下更新(在我的最后)并隐藏x不是数组的事实(即使它不是).
数据:
[
{ firstName: "Foo", lastName: "Bar" },
{ firstName: "John", lastName: "Doe" }
]
Run Code Online (Sandbox Code Playgroud)
如何使用 swift 数组和字典拥有这种结构?该数据显示数组内的字典,对吧?所以我建议:
var persons:Array = [Dictionary<String, String>()]
Run Code Online (Sandbox Code Playgroud)
但这给了我错误:
Cannot convert the expressions type () to type Array<T>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
在我的init函数中,我有:
self.x = [T](count: dimensions, repeatedValue: 0)
Run Code Online (Sandbox Code Playgroud)
这不起作用.我如何让它工作.
我希望x是一个类型为T的数组,它被初始化为0.(T直观地像Int,但可能是其他数字表示.)
var persons = [Dictionary<String, String>()]
println(persons.count)
Run Code Online (Sandbox Code Playgroud)
打印1.我看到数组在初始化时有一个空字典,但有没有办法避免它并且有0个元素而不是1?后来我需要能够做到:
persons.append(["firstName": "Foo", "lastName": "Bar"])
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?