我可以通过使用下面的代码在myString"ATGGACGTGAGCTGATCGATGGCTGAAATGAAAA"(即索引范围是0 .. <3)中找到字符串"ATG"的第一个位置.问题是如何找到"ATG"的所有位置,而不仅仅是myString中的第一个位置.
let stringRange = myString.rangeOfString("ATG")
Run Code Online (Sandbox Code Playgroud) 我更新了Xcode(7.3)并且有很多变化; 表达式的C-like将被弃用.举个简单的例子,
for var i = 0; i <= array.count - 1; i++
{
//something with array[i]
}
Run Code Online (Sandbox Code Playgroud)
如何编写这个清晰简单的C-like for-loop以符合新的变化?
for var i = 0, j = 1; i <= array.count - 2 && j <= array.count - 1; i++, j++
{
//something with array[i] and array[j]
}
Run Code Online (Sandbox Code Playgroud)
更新.还有一个变种
for var i = 0; i <= <array.count - 1; i++
{
for var j = i + 1; j <= array.count - 1; j++
{
//something with array[i] and array[j] …Run Code Online (Sandbox Code Playgroud) 我发现字符串着色的时间取决于使用了多少不同的NSColors.在下面的代码中,如果我只对三种情况使用一种颜色,则文本着色过程比三种不同颜色用于这三种情况的情况快3倍,每种情况下每种颜色.为什么?有没有办法不减慢三种不同颜色的着色?
for i in 0..<arrayOfNSRangesForA.count
{
textFromStorage.addAttribute(NSForegroundColorAttributeName, value: NSColor.green, range: arrayOfNSRangesForA[i])
}
for i in 0..<arrayOfNSRangesForT.count
{
textFromStorage.addAttribute(NSForegroundColorAttributeName, value: NSColor.green, range: arrayOfNSRangesForT[i])
}
for i in 0..<arrayOfNSRangesForC.count
{
textFromStorage.addAttribute(NSForegroundColorAttributeName, value: NSColor.green, range: arrayOfNSRangesForC[i])
}
Run Code Online (Sandbox Code Playgroud)
更新
我发现了一件坏事.当我改变着色时NSForegroundColorAttributeName,NSBackgroundColorAttributeName运行时间显着增加--10倍.对于20 000个字符,它是一种颜色,NSForegroundColorAttributeName- 1秒,NSBackgroundColorAttributeName- 10秒; 如果有三种颜色 - 相应的3和30秒.对我而言,Swift的功能非常糟糕!由于DNA的长度是数千个A,T,G,C字符,因此无法用DNA(ATGC序列)着色进行正常工作!
更新 在评论中,我建议仅为文本的可见部分着色.我尝试过这种方法,与标准方式相比,即使对于较短的文本也是如此.所以,我有文本的NSRange文本的可见部分,并在滚动时使用通知滚动时在飞行中着色.这是一个糟糕的方式.
我有快速的元组数组,[(String, String)]并希望将此数组转换为NSMutableArray.我试过这个并没有用:
let myNSMUtableArray = swiftArrayOfTuples as! AnyObject as! NSMutableArray
Run Code Online (Sandbox Code Playgroud) 我通过在mainController中为此NSView的按钮分配以下操作,为NSPopover的自定义NSView创建了打印功能:
@IBOutlet var plasmidMapIBOutlet: PlasmidMapView!
@IBAction func actionPrintfMap(sender: AnyObject)
{
plasmidMapIBOutlet.print(sender)
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但打印窗口没有纸张尺寸和方向选项,请参见下面的截图.

我已经想出了一些时刻,但并不完全.所以,我可以通过以下代码设置打印
@IBAction func actionPrintMap(sender: AnyObject)
{
let printInfo = NSPrintInfo.sharedPrintInfo()
let operation: NSPrintOperation = NSPrintOperation(view: plasmidMapIBOutlet, printInfo: printInfo)
operation.printPanel.options = NSPrintPanelOptions.ShowsPaperSize
operation.printPanel.options = NSPrintPanelOptions.ShowsOrientation
operation.runOperation()
//plasmidMapIBOutlet.print(sender)
}
Run Code Online (Sandbox Code Playgroud)
但是,我还有问题.从上面的代码,我可以只定向(最后,ShowsOrientation),但不能同时纸型和方向.如何管理ShowsPaperSize和ShowsOrientation?
有一个 NSImageView 的子类,并且创建了 CALayer 的实例,所以我们在图像上看到了一个矩形。问题是如何在鼠标按下时(当鼠标指针在矩形内)并拖动时移动这个矩形。当鼠标向上时,这个矩形 (CALayer) 应该留在图像上的新位置。
例如
class ImageViewWithRectangle: NSImageView
{
var shape : CAShapeLayer!
func drawRectangle()
{
shape = CAShapeLayer()
shape.lineWidth = 1.0
shape.fillColor = NSColor.clear().cgColor
shape.strokeColor = NSColor.gray().cgColor
shape.lineDashPattern = [1,1]
self.layer?.addSublayer(shape)
let path = CGMutablePath()
path.moveTo(nil, x: 1, y: 1)
path.addLineTo(nil, x: 1, y: 50)
path.addLineTo(nil, x: 50, y: 50)
path.addLineTo(nil, x: 50, y: 1)
path.closeSubpath()
self.shape.path = path
}
}
Run Code Online (Sandbox Code Playgroud) 有以空格开头的字符串。如何在此类字符串中找到除空格之外的任何第一个字符的索引?
我试图遵循与圆柱体,盒子......相同的简单逻辑,所以只需定义textNode的位置,但它不起作用.
func makeText(text3D: String, position: SCNVector3, depthOfText: CGFloat, color: NSColor, transparency: CGFloat) -> SCNNode
{
let textTodraw = SCNText(string: text3D, extrusionDepth: depthOfText)
textTodraw.firstMaterial?.transparency = transparency
textTodraw.firstMaterial?.diffuse.contents = color
let textNode = SCNNode(geometry: textTodraw)
textNode.position = position
return textNode
}
Run Code Online (Sandbox Code Playgroud) 我在Xcode上花了很长时间没有解决方案,我在Xcode中错过了OSX应用程序的简单功能。当我在NStextView窗口中键入文本或在其中键入文本时,该文本应在右侧继续,并且我可以水平滚动。现在改为改为在下一行显示文本,而我只有垂直滚动。我必须在xcode设置中做什么才能进行水平滚动而不跳到下面的行?