小编pac*_*ion的帖子

使用Swift中的NSMutableAttributedString更改特定文本的颜色

我遇到的问题是我希望能够在TextView中更改某些文本的textColor.我使用的是串联字符串,只是希望我附加到TextView文本中的字符串.似乎我想要使用的是NSMutableAttributedString,但我没有找到任何有关如何在Swift中使用它的资源.到目前为止我所拥有的是这样的:

let string = "A \(stringOne) with \(stringTwo)"
var attributedString = NSMutableAttributedString(string: string)
textView.attributedText = attributedString
Run Code Online (Sandbox Code Playgroud)

从这里我知道我需要找到需要更改textColor的单词范围,然后将它们添加到属性字符串中.我需要知道的是如何从attributionString中找到正确的字符串,然后更改它们的textColor.

由于我的评分太低,我无法回答我自己的问题,但这是我找到的答案

我通过翻译来翻译一些代码来找到我自己的答案

更改NSAttributedString中子字符串的属性

以下是Swift中的实现示例:

let string = "A \(stringOne) and \(stringTwo)"
var attributedString = NSMutableAttributedString(string:string)

let stringOneRegex = NSRegularExpression(pattern: nameString, options: nil, error: nil)
let stringOneMatches = stringOneRegex.matchesInString(longString, options: nil, range: NSMakeRange(0, attributedString.length))
for stringOneMatch in stringOneMatches {
    let wordRange = stringOneMatch.rangeAtIndex(0)
    attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.nameColor(), range: wordRange)
}

textView.attributedText = attributedString
Run Code Online (Sandbox Code Playgroud)

由于我想要更改多个字符串的textColor,我将创建一个帮助函数来处理它,但这适用于更改textColor.

ios nsmutableattributedstring swift

90
推荐指数
8
解决办法
11万
查看次数

如何在Swift上的sendSynchronousRequest中检查Response.statusCode

如何在Swift中检查SendSynchronousRequest中的response.statusCode代码如下:

let urlPath: String = "URL_IS_HERE"
var url: NSURL = NSURL(string: urlPath)
var request: NSURLRequest = NSURLRequest(URL: url)
var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?> = nil

var error: NSErrorPointer? = nil
var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: response, error: nil) as NSData?
Run Code Online (Sandbox Code Playgroud)

之前和在目标c中,我们检查response.statusCode用这个:(长)response.statusCode但在swift中我不知道如何检查响应状态代码

nsurlconnection nsurlrequest ios swift

44
推荐指数
7
解决办法
5万
查看次数

如何在 Playground 中导入 Swift 包?

我可以将 Swift Package 导入到我工作区中的 Playground 吗?我已经阅读了答案,但我认为它已经过时了,因为现在我们可以在 iOS 项目中使用 Swift Packages。

swift swift-playground swift-package-manager

16
推荐指数
3
解决办法
3717
查看次数

按索引移位数组中的元素

给定n个元素的数组,即

var array = [1, 2, 3, 4, 5]

我可以写一个扩展名,Array所以我可以修改数组来实现这个输出[2, 3, 4, 5, 1]:

mutating func shiftRight() {
  append(removeFirst())
}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这样一个函数,可以通过任何索引,正面或负面移动数组.我可以使用if-else子句以命令式样式实现此函数,但我正在寻找的是功能实现.

算法很简单:

  1. 通过提供的索引将数组拆分为两个
  2. 将第一个数组追加到第二个数组的末尾

有没有办法在功能风格中实现它?

我完成的代码:

extension Array {
  mutating func shift(var amount: Int) {
    guard -count...count ~= amount else { return }
    if amount < 0 { amount += count }
    self = Array(self[amount ..< count] + self[0 ..< amount])
  }
}
Run Code Online (Sandbox Code Playgroud)

arrays generics ios swift

13
推荐指数
3
解决办法
1万
查看次数

在Swift中关闭并呈现视图控制器

嗨,我正在尝试提供一个viewcontroller并解除我当前的模态视图,但这段代码不起作用

self.dismissViewControllerAnimated(true, completion: {
    let vc = self.storyboard?.instantiateViewControllerWithIdentifier("OrderViewController")
    self.presentViewController(vc!, animated: true, completion: nil)
})
Run Code Online (Sandbox Code Playgroud)

反之亦然,在presentviewcontroller的完成块上也不起作用

编辑:更换vc!自我

uiviewcontroller ios swift

12
推荐指数
3
解决办法
5万
查看次数

Swift 4 UNUserNotificationCenter持续时间(过去24小时内收到通知)

我正在使用UNUserNotificationCenter来发送通知,如下所示:

UNUserNotificationCenter.current().getDeliveredNotifications { (notifications) in
    self.array = notifications
}
Run Code Online (Sandbox Code Playgroud)

然后在viewWillDisappear上我清除applicationIconBadgeNumber,如下所示:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.shared.applicationIconBadgeNumber = 0
}
Run Code Online (Sandbox Code Playgroud)

这样做不会让我的通知持续很长时间,是的,我希望看到通知后徽章编号为0,但我希望这些编号可以持续24-48小时....我怎么能完成这个?

swift

8
推荐指数
1
解决办法
354
查看次数

如何正确使用needsInputModeSwitchKey?

当我尝试使用(在我的代码中的任何地方和任何时间)needsInputModeSwitchKey属性时,UIInputViewController我面临警告:

- [UIInputViewController requiresInputModeSwitchKey] 在与主机应用程序建立连接之前被调用。这将产生不准确的结果。请确保在您的主视图控制器初始化后调用它。

尽管有警告,但我得到了正确的值,而且看起来很奇怪。我应该怎么做才能消除这个警告?

swift ios-keyboard-extension

8
推荐指数
0
解决办法
543
查看次数

如何防止我的 HTTP Get 请求在 Swift 中缓存?

我遇到了一个不知从何而来的奇怪错误。我的应用程序快完成了,我正在测试它,然后我注意到数据没有更新。数据库得到更新,我可以直接点击 URL 并看到数据正在从服务器正确返回,但是当我在 Swift 中打印数据时,它没有改变。

一旦我重新运行应用程序,它就会改变(大多数时候)

我正在使用 Alamofire,但我也尝试了其他两种方法:

let url = NSURL(string: "http://www.stackoverflow.com")
let request = NSURLRequest(URL: url!)

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
    println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
Run Code Online (Sandbox Code Playgroud)

let url = NSURL(string: "http://www.stackoverflow.com")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
    println(NSString(data: data, encoding: NSUTF8StringEncoding))
}

task.resume()
Run Code Online (Sandbox Code Playgroud)

所有 3 个都打印出相同的数据。

我猜测这是 Swift 中的缓存问题,但我没有设置任何内容来告诉 Swift 缓存数据,并且在过去几周内一直运行良好。

我今天所做的唯一一件事就是为我的项目创建一个 Git 存储库。

有谁知道这可能是什么原因造成的?


*编辑:

使用阿比·贝克特的回答我尝试了这个:

符合委托 NSURLConnectionDelegate

添加:

func connection(connection: NSURLConnection, willCacheResponse cachedResponse: NSCachedURLResponse) -> NSCachedURLResponse?
{
  return nil // never …
Run Code Online (Sandbox Code Playgroud)

swift

7
推荐指数
1
解决办法
7299
查看次数

SceneKit - 如何获取.dae模型的动画?

好吧,我在这里使用ARKit和场景工具包,我在查看其他问题只是处理场景工具包试图获得.dae格式模型并加载各种动画以运行该模型时遇到问题 - 现在我们在iOS11似乎有些解决方案不起作用.

这是我如何获得我的模型 - 从.dae没有应用动画的基础场景.我用Maya导入这些 -

var modelScene = SCNScene(named: "art.scnassets/ryderFinal3.dae")!

if let d = modelScene.rootNode.childNodes.first {
    theDude.node = d
    theDude.setupNode()
}
Run Code Online (Sandbox Code Playgroud)

然后在Dude班:

func setupNode() {
    node.scale = SCNVector3(x: modifier, y: modifier, z: modifier)
    center(node: node)
}
Run Code Online (Sandbox Code Playgroud)

轴的缩放和居中需要,因为我的模型不在原点.那很有效.然后现在使用一个名为"Idle.dae"的不同场景,我尝试加载动画以便以后在模型上运行:

func animationFromSceneNamed(path: String) -> CAAnimation? {
    let scene  = SCNScene(named: path)
    var animation:CAAnimation?
    scene?.rootNode.enumerateChildNodes({ child, stop in
        if let animKey = child.animationKeys.first {
            animation = child.animation(forKey: animKey)
            stop.pointee = true
        }
    })
    return animation
}
Run Code Online (Sandbox Code Playgroud)

我打算为我导入Xcode并存储所有动画的所有动画场景执行此操作

var …
Run Code Online (Sandbox Code Playgroud)

animation maya scenekit swift arkit

7
推荐指数
1
解决办法
1592
查看次数

闭包中的弱引用

我需要在闭包内使用self的弱引用.我为此目的使用以下代码:

func testFunction() { 
    self.apiClient.getProducts(onCompletion:  { [weak self] (error, searchResult) in     
        self?.isSearching = false
     }
}
Run Code Online (Sandbox Code Playgroud)

我可以在testFunction的主体中声明self的弱引用,而不是在关闭的捕获列表中给出弱引用.

func testFunction() { 
     weak var weakSelf = self
     self.apiClient.getProducts(onCompletion: {(error, searchResult) in     
         weakSelf?.isSearching = false
     }
}
Run Code Online (Sandbox Code Playgroud)

类似的,Objective-C中也使用了语法来使用块内的弱引用.

__weak typeof(self) weakSelf = self; 
Run Code Online (Sandbox Code Playgroud)

在闭包中通过捕获列表指定弱引用是否有任何优势,而不是在函数体中声明弱变量.如果函数体中有多个闭包,则在函数体中声明弱变量并在所有闭包中使用相同的变量而不是在每个闭包中写入捕获列表更有意义.

closures swift

7
推荐指数
1
解决办法
167
查看次数