Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 具有快速超慢速键入和自动完成功能的Xcode 6_Ios_Xcode_Autocomplete_Swift_Xcode6 - Fatal编程技术网

Ios 具有快速超慢速键入和自动完成功能的Xcode 6

Ios 具有快速超慢速键入和自动完成功能的Xcode 6,ios,xcode,autocomplete,swift,xcode6,Ios,Xcode,Autocomplete,Swift,Xcode6,当您键入代码时,尤其是使用自动完成时,是否只有我或使用Swift的Xcode 6(6.0.1)似乎是超慢的 一个普通的Objective-C类,即使在Swift项目中,其工作原理与以前几乎相同,因此是Swift杀死了它 其他人是否也经历过同样的不便?你知道如何提高绩效吗 我试着玩一些设置,但没有运气 当然,我也尝试过重新启动Xcode和计算机,但没有成功 没有其他重的 应用程序已打开 我使用的是2009年年中的Macbook Pro(2.26 GHz Intel Core 2 Duo),带有

当您键入代码时,尤其是使用自动完成时,是否只有我或使用Swift的Xcode 6(6.0.1)似乎是超慢的

一个普通的Objective-C类,即使在Swift项目中,其工作原理与以前几乎相同,因此是Swift杀死了它

其他人是否也经历过同样的不便?你知道如何提高绩效吗

  • 我试着玩一些设置,但没有运气
  • 当然,我也尝试过重新启动Xcode和计算机,但没有成功
  • 没有其他重的 应用程序已打开
我使用的是2009年年中的Macbook Pro(2.26 GHz Intel Core 2 Duo),带有8GB RAM和SSD HD,这根本不是最新的产品,但仍然不是一个完全的垃圾

这是一个耻辱,因为我很兴奋开始使用Swift,现在真的无法忍受


想法/提示?

我发现,当你:

  • 在单个语句中使用长表达式(请参见)
  • 在单个表达式中混合使用多个自定义运算符
第二种情况似乎在最新的xcode版本中得到了修复。示例:我定义了两个自定义运算符和,并在表达式中使用,如
abcd
。拆分为多行解决了此问题:

let r1 = a <&&> b
let r2 = r1 <&&> c
let r3 = r2 <||> d
设r1=ab
设r2=r1c
设r3=r2d
我希望你的案件包括在上述两个案件中。。。请在任何情况下发表评论

您是否使用Spotify?
我在2009年年中(2.66Ghz)的iMac上安装了带有Xcode 6.1 GM的约塞米蒂GM。我发现一个名为“SpotifyWebHelper”的进程总是被标记为没有响应的红色,所以我在spotify中禁用了“从web开始”选项,现在Xcode似乎运行得更好了。

在键入一些“简单”时,我还体验到了100%以上的CPU使用率代码。一些小技巧可以通过构造代码的方式使swift解析器更快

不要在字符串中使用“+”concatator。对我来说,这会很快触发缓慢。 每个新的“+”都会使解析器进入爬网状态,每次在函数体中添加新字符时,它都必须重新分析代码

而不是:

var str = "This" + String(myArray.count) + " is " + String(someVar)
var result = pi * 2 * radius 
使用模板语法,在swift中解析似乎更有效:

var str = "This \(myArray.count) is \(someVar)"
这样,我基本上注意到strlen中没有内联变量“\(*)”的限制

如果您有使用+/*-的计算,则将其拆分为更小的部分

而不是:

var str = "This" + String(myArray.count) + " is " + String(someVar)
var result = pi * 2 * radius 
使用:

它可能看起来效率较低,但swift解析器通过这种方式要快得多。 有些公式即使在数学上是正确的,但如果它们需要进行许多运算,就无法编译

如果您有一些复杂的计算,请将其放入func中。通过这种方式,解析器可以对其进行一次解析,而不必每次更改函数体中的某些内容时都对其进行重新解析

因为如果在函数体中有一个计算,那么swift解析器每次都会检查它的类型、语法等是否仍然正确。如果计算上方的一行发生更改,则计算/公式中的某些变量可能已更改。如果你把它放在一个外部函数中,那么它将被验证一次,swift很高兴它是正确的,并且不会不断地重新分析它,这导致了高CPU使用率

通过这种方式,我在打字时从每次按键的100%到低CPU。 例如,将这3行内联放在函数体中可以使swiftparser爬行

let fullPath =  "\(NSHomeDirectory())/Library/Preferences/com.apple.spaces.plist"
let spacesData  = NSDictionary(contentsOfFile: fullPath )! // as Dictionary<String, AnyObject>
let spaces : AnyObject   = spacesData["SpacesDisplayConfiguration"]!["Management Data"]!!["Monitors"]!![0]["Spaces"]!! 

println ( spaces )
let fullPath=“\(NSHomeDirectory())/Library/Preferences/com.apple.spaces.plist”
让spacesData=NSDictionary(contentsOfFile:fullPath)!//作为字典
让空格:AnyObject=spacesData[“SpacesDisplayConfiguration”]![“管理数据”]!![“监视器”]!![0][“空格”]!!
println(空格)
但是如果我把它放在func中,稍后调用它,swiftparser会更快

// some crazy typecasting here to silence the parser
// Autodetect of Type from Plist is very rudimentary, 
// so you have to teach swift your types
// i hope this will get improved in swift in future
// would be much easier if one had a xpath filter with
// spacesData.getxpath( "SpacesDisplayConfiguration/Management Data/Monitors/0/Spaces" ) as Array<*> 
// and xcode could detect type from the plist automatically
// maybe somebody can show me a more efficient way to do it
// again to make it nice for the swift parser, many vars and small statements
func getSpacesDataFromPlist() -> Array<Dictionary<String, AnyObject>> {
  let fullPath =  "\(NSHomeDirectory())/Library/Preferences/com.apple.spaces.plist"

  let spacesData  = NSDictionary(contentsOfFile: fullPath )!    as Dictionary<String, AnyObject>
  let sdconfig    = spacesData["SpacesDisplayConfiguration"]    as Dictionary<String, AnyObject>
  let mandata     = sdconfig["Management Data"]                 as Dictionary<String, AnyObject> 
  let monitors    = mandata["Monitors"]                         as Array<Dictionary<String, AnyObject>> 
  let monitor     = monitors[0]                                 as Dictionary<String, AnyObject>
  let spaces      = monitor["Spaces"]                           as Array<Dictionary<String, AnyObject>>

  return spaces
}

func awakeFromNib() {
  ....
  ... typing here ...

  let spaces = self.getSpacesDataFromPlist()
  println( spaces) 
}
//这里有一些疯狂的类型转换来让解析器安静下来
//Plist类型的自动检测非常简单,
//所以你必须教斯威夫特你的类型
//我希望这将在以后的swift中得到改进
//如果有一个带有
//getxpath(“SpacesDisplayConfiguration/Management Data/Monitors/0/Spaces”)作为数组
//xcode可以自动从plist中检测类型
//也许有人能告诉我一个更有效的方法
//同样,为了使swift解析器更好,许多变量和小语句
func getSpacesDataFromPlist()->数组{
let fullPath=“\(NSHomeDirectory())/Library/Preferences/com.apple.spaces.plist”
让spacesData=NSDictionary(contentsOfFile:fullPath)!作为字典
将sdconfig=spacesData[“SpacesDisplayConfiguration”]设为字典
让mandata=sdconfig[“管理数据”]作为字典
让monitors=mandata[“monitors”]作为数组
让monitor=monitors[0]作为字典
让空格=监视器[“空格”]作为数组
返回空间
}
func awakeFromNib(){
....
…在这里打字。。。
设spaces=self.getSpacesDataFromPlist()
println(空格)
}
Swift和XCode 6.1仍然存在很多缺陷,但如果您遵循这些简单的技巧,编辑代码将再次成为可以接受的。我更喜欢swift,因为它去掉了.h文件,并且使用了更简洁的语法。仍然需要许多类型转换,如“myVar as AnyObject”,但与复杂的objective-c项目结构和语法相比,这是一个较小的缺点

还有另一个体验,我尝试了SpriteKit,它使用起来很有趣,但如果你不需要以60帧/秒的速度不断地重新上漆,它的效率相当高。如果您的“精灵”不经常更改,那么使用旧的CALayers对CPU来说会更好。如果您不更改层的.contents,那么CPU基本上是空闲的,但是如果您有一个SpriteKit应用程序在后台运行,那么其他应用程序中的视频播放可能会由于硬限制的60fps更新循环而开始中断

alias xcodeclean="rm -frd ~/Library/Developer/Xcode/DerivedData/* && rm -frd ~/Library/Caches/com.apple.dt.Xcode/*"
/*
 * comment 
    /*
     * embedded comment
     */
 */