我想在调用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时停止。我该怎么做?
我有一系列类别。每个类别实例都有优惠属性。
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) 我在 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 的模块
我尝试从不同的目录导入。但是,仍然遇到同样的错误。有什么帮助吗?
在某些情况下,我看到的一些代码hashValue用于转换Bool为Int.
但是,代码
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)
我希望1和0,虽然.
我使用XCode 10.0 beta 2(10L177m),MacOS High Sierra和Swift 4.2.我可以切换到Swift 4.0以获得同样的结果.
现在,有什么我做错了或hashValue没有可靠的转换方法?
我让这个问题不受特定上下文的限制,因为我相信这对其他人会有所帮助:
我有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/,我发现它很有用,但仍然停留在此错误上。
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如何解决这个逻辑运算符顺序?
我正在尝试创建一个方法来配置应用程序中的按钮.我的方法按预期执行,但阴影不会绘制.它没有崩溃.
我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.drawsAsynchronously而layer.shouldRasterize无济于事.
任何进一步的想法/建议表示赞赏.
我写了一个类似的协议:
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)
我收到以下错误:
“布尔”不能转换为“布尔”
请帮助我了解问题所在。
使用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) 我正在制作个人资料照片.
我在故事板上添加了一个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)
但是当试图从相机或相册添加图像时,图像会被压缩.
我也试图调整图像大小,但仍然,图像正在压缩.
我究竟做错了什么?
我将旧应用程序更新为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
目前,我已经制作了一个名为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?
我更新到 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?请帮忙!