小编pac*_*ion的帖子

如何在Swift中退出“ DispatchQueue.main.asyncAfter”

我想在调用deinit时退出“ DispatchQueue.main.asyncAfter”。

subView.swift

DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
    self.doSomething()
}

func doSomething(){ 
    if self.subView.flgA == false { //error because subView's deinit is already called
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

_ = self.navigationController?.popViewController(animated: true)调用ViewController do 和deinit时,首先在ViewController和subView中调用deinit,然后在几分钟后doSomething()调用。我想在doSomething()执行popViewController时停止。我该怎么做?

xcode ios swift

2
推荐指数
2
解决办法
2653
查看次数

使用对象过滤嵌套数组

我有一系列类别。每个类别实例都有优惠属性。

class Category {
   var offers : [Offer]?
   var title : String?
   var id : Int?
}

class Offer {
    var type : String?
}

//global variable
var categories = [ categ1, categ2, ...]
Run Code Online (Sandbox Code Playgroud)

如何按 Offer.type 过滤类别?

我已经尝试过:

return categories.map { (category) -> Category in
    let offers = category.offers?.filter { $0.type == myType }
    category.offers = offers
    return category
}
Run Code Online (Sandbox Code Playgroud)

它有效,但第二次调用函数后数组变空。可能是因为报价被重写了?

然后我尝试了这个(产生了相同的错误结果):

var resultCategories = [Category]()

for category in categories {
    guard let offers = category.offers else { continue } …
Run Code Online (Sandbox Code Playgroud)

arrays filter swift

2
推荐指数
1
解决办法
2930
查看次数

谷歌合作实验室导入火炬错误

我在 google colaboratory 上收到以下错误。

() 中的 ImportErrorTraceback (最近一次调用最后一次) ----> 1 import torch

/usr/local/lib/python3.6/site-packages/torch/ init .py in () 54 except ImportError: 55 pass ---> 56 from torch._C import * 57 58 all += [name for name in目录(_C)

导入错误:没有名为 _C 的模块

我尝试从不同的目录导入。但是,仍然遇到同样的错误。有什么帮助吗?

pytorch google-colaboratory

2
推荐指数
1
解决办法
7282
查看次数

Bool.hashValue有效转换为Int吗?

在某些情况下,我看到的一些代码hashValue用于转换BoolInt.

但是,代码

let someValue = true
let someOtherValue = false

print(someValue.hashValue)
print(someOtherValue.hashValue)
Run Code Online (Sandbox Code Playgroud)

得到我的输出

-5519895559129191040
7814522403520016984
Run Code Online (Sandbox Code Playgroud)

我希望10,虽然.

我使用XCode 10.0 beta 2(10L177m),MacOS High Sierra和Swift 4.2.我可以切换到Swift 4.0以获得同样的结果.

现在,有什么我做错了或hashValue没有可靠的转换方法?

hash boolean type-conversion swift swift4

2
推荐指数
1
解决办法
661
查看次数

Swift 4-仅将一个文本字段标识为委托进行editDidEnd等

我让这个问题不受特定上下文的限制,因为我相信这对其他人会有所帮助:

我有2个IB出口文本字段:

@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
Run Code Online (Sandbox Code Playgroud)

我希望能够禁用页面上的按钮,直到两个按钮都正确填写为止,以便在ViewDidLoad()中使用以下委托(我已经在我的VC中添加了TextFieldDelegate。)

override func viewDidLoad() {
    textField1.delegate = self
    textField2.delegate = self
}
Run Code Online (Sandbox Code Playgroud)

然后,我将使用一些功能来进行表单验证和采取特定的操作,但是为了简单起见,我们假设它只是打印到控制台。

我只想检查textField1中的验证,而不检查textField2中的验证。即,所需的输出是当用户开始编辑textField1时输出的内容,但是如果用户编辑textField2则不输出任何内容。

我目前正在使用:

func textFieldDidBeginEditing(_ textField1: UITextField) {
    print("TextField did begin editing method called")
}
Run Code Online (Sandbox Code Playgroud)

但这是在编辑任一textField时输出的。

我以为我指定了_ textField1,所以不确定为什么两者都触发了它?

有一些答案可以解决Swift 3及更早版本的类似问题。特别是,有一个答案引用了此链接http://sourcefreeze.com/uitextfield-and-uitextfield-delegate-in-swift/,我发现它很有用,但仍然停留在此错误上。

ios swift swift4

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

快速有序的逻辑运算符

func addOne() -> Bool {
    x += 1
    print("111")
    return true
}

if true || addOne() && addOne() && addOne(){
    print("open the door")
} else {
    print("can't open the door")
}
Run Code Online (Sandbox Code Playgroud)

我知道逻辑运算符是从左到右计算的,但在这种情况下,addOne在这种情况下不会调用函数。

所以x值是0和我预期的2如何解决这个逻辑运算符顺序?

swift

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

UIButton阴影不画画

我正在尝试创建一个方法来配置应用程序中的按钮.我的方法按预期执行,但阴影不会绘制.它没有崩溃.

UIButton extension用以下方法创建了一个:

func configureWhiteText(withBackgroundColor buttonColor: UIColor?) {
    // basic configuration
    tintColor = UIColor.white
    setTitleColor(UIColor.white, for: .normal)
    backgroundColor = buttonColor

    // layer stuff
    layer.drawsAsynchronously = true
    layer.shouldRasterize = true
    layer.cornerRadius = 10.0
    layer.masksToBounds = false
    layer.shadowColor = UIColor.black.cgColor
    layer.shadowOffset = CGSize(width: 5.0, height: 5.0)
    layer.shadowRadius = 5.0
}
Run Code Online (Sandbox Code Playgroud)

我已经在一个UITableViewControllerin viewDidLoad和'viewWillAppear`中试了一下而没有运气:

myButton.configureWhiteText(withBackgroundColor: UIColor.blue)
Run Code Online (Sandbox Code Playgroud)

按钮位于分组的静态单元格中UITableViewController.除了面向阴影的代码行之外,一切都在配置方法中工作.layer.cornerRadius按预期圆角,但没有其他方向layer的线条绘制阴影.

我已经证实了layer.masksToBounds = false.我也尝试过评论layer.drawsAsynchronouslylayer.shouldRasterize无济于事.

任何进一步的想法/建议表示赞赏.

uibutton ios swift swift3

0
推荐指数
1
解决办法
1144
查看次数

Swift泛型布尔不能转换为布尔

我写了一个类似的协议:

public protocol Protocol1 {
    func execute<T, R>(req: T) -> Promise<R>
}
Run Code Online (Sandbox Code Playgroud)

实现了如下协议:

struct Implemented1 : Protocol1 {
    func execute<String, Bool>(req : String) -> Promise<Bool> {
        return Promise<Bool>() { fulfill, reject in
           fulfill(true)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

“布尔”不能转换为“布尔”

请帮助我了解问题所在。

generics ios swift

0
推荐指数
1
解决办法
1770
查看次数

PromiseKit For In 循环实现时

使用Swift,我PromiseKit第一次尝试将 Promise 合并到我的代码中,并且在语法上难以理解如何使其工作。

我的目标是将Firebase数据请求流水线化,并在所有返回的数据满足附加数组后执行另一种方法。似乎promise已解决并在使用数据设置数组之前运行最终方法。我相信我应该使用“when”,但不可否认的是理解文档有困难。

缩写,相关代码如下:

getPosts(ids).done {
    runningFinalMethod(self.arr)
}

func getPosts(_ ids: [String]) -> Promise<Void>  {
    return Promise { seal in
        for id in ids {
            db.collection("data").whereField("id", isEqualTo: id).getDocuments(completion: { (dataForId, error) in                
                appendData(dataForId)
            })
        }
        seal.fulfill(())
    }
}

func appendData(_ dataForId: [data]) {                                  
    arr.append(contentsOf: dataForId)            
}
Run Code Online (Sandbox Code Playgroud)

promise ios firebase swift promisekit

0
推荐指数
1
解决办法
1265
查看次数

在圆形UIImageView中获取压缩的图像

我正在制作个人资料照片.

我在故事板上添加了一个UIImageView(比如userImageView),方面模式为SCALE TO FILL并在我的swift文件中添加了以下代码

self.userImageView.layer.borderWidth = 10
self.userImageView.layer.borderColor = UIColor.white.cgColor
self.userImageView.layer.cornerRadius = self.userImageView.frame.height/2
self.userImageView.clipsToBounds = true
Run Code Online (Sandbox Code Playgroud)

但是当试图从相机或相册添加图像时,图像会被压缩.

我也试图调整图像大小,但仍然,图像正在压缩.

我究竟做错了什么?

uiimageview ios swift

0
推荐指数
1
解决办法
48
查看次数

"URLRequest"类型的值没有成员"URLString"

我将旧应用程序更新为swift 3并且我有一些迁移错误.在这部分代码上:

func done(_ request: URLRequest?, response: HTTPURLResponse?) {
    let visibleCells = tableView.visibleCells as! [NewsStoryCell]
    let cells = visibleCells.filter({ $0.news.thumbUrl == request?.URLString })

    if let cell = cells.first {
        cell.reloadThumbImage()
    }
}
Run Code Online (Sandbox Code Playgroud)

我有错误:

"URLRequest"类型的值没有成员"URLString"

上:

$0.news.thumbUrl == request?.URLString

ios swift

-1
推荐指数
1
解决办法
1001
查看次数

有没有办法创建一个我可以改变的自定义类?

目前,我已经制作了一个名为SongNames的自定义类.这是它的代码:

import Foundation

class songAttributes {
private var _songTitle: String!
private var _songURL: String!

var songTitle: String {
    return _songTitle
}

init(songTitle: String, songURL: String) {
    _songURL = songURL
    _songTitle = songTitle

}
var songURL: String {
    return _songURL
}

}
Run Code Online (Sandbox Code Playgroud)

我没有问题为这个类设置值.例如,我可能会写:

var songAttribute = songAttributes(songTitle: "That's What I Like", url: "some url")
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试更改我刚刚创建的变量的属性,比如说:

songAttribute.songTitle = "Locked Out of Heaven"
Run Code Online (Sandbox Code Playgroud)

我收到消息:"错误:songTitle是一个获得唯一的属性"

话虽如此,有没有办法搞砸我的SongName类,以便可以更改这些属性,而不仅仅是get-only?

properties ios swift

-1
推荐指数
1
解决办法
75
查看次数

Swift 3.0 中 CGSizeMake 的替代品是什么

我更新到 Swift 3.0 时遇到了一个错误。由于某种原因 Swift 3.0 不支持CGSizeMake. 我的代码如下所示:

self.scrollView.contentSize = CGSizeMake(self.view.frame.width*2, 
self.view.frame.size.height)
Run Code Online (Sandbox Code Playgroud)

对于我的情况,有哪些替代方案CGSizeMake?请帮忙!

swift

-4
推荐指数
1
解决办法
2788
查看次数