我想编写一个 XCUITest 来获得系统对话框/警报。如何使用 Xcode 9 在 Swift 3 / Swift 4 中处理它?它应该找到警报并单击两个显示的按钮之一。每次,如果我搜索警报,系统都找不到它们。
XCUIApplication().alerts.element.exists // Will get nothing
XCUIApplication().alerts.element.buttons.element(boundBy: 0) // Will get nothing too.
Run Code Online (Sandbox Code Playgroud) 我有一个视图控制器,它显示在 a 中,UIView因为我正在使用CarbonKit制作类似 android 的选项卡。
我有一个userProfileViewController我在其中一个选项卡下显示的,这是UIImageView我试图通过使用以下代码在圆圈中显示的:
self.userDisplayPic.layer.cornerRadius = self.userDisplayPic.frame.size.width / 2;
self.userDisplayPic.clipsToBounds = true
Run Code Online (Sandbox Code Playgroud)
我的猜测是,这可能是因为在内部显示时自动调整大小UIView可能会压缩设计,但其他元素特别是更新按钮似乎很好。所以有什么建议可以解决这个问题吗?
我在 swift 4 中使用新的拖放 api。我需要通过长按它来拖动一个单元格并将图像放在视图控制器的视图上。这是在同一个应用中拖拽,因为它需要在iPhone上运行,而这个功能只在同一个应用中的手机上运行。我使用真实设备来测试我所写的内容,但我无法弄清楚为什么一旦我点击了一个单元格就无法拖动它。但是在 iPad 上运行模拟器......它有效,我可以拖动它。我已经查看了苹果的文档,他们指定可以在拖动过程中配置拖动项的外观,但默认情况下,如果不存在委托函数的自定义实现或返回 nil,则将拖动整个单元格;所以它应该仍然有效,它在 iPad 上的模拟器中执行此操作,但不在模拟 iPhone 或真实 iPhone 上执行。代码清单如下。也许有人已经解决了这个问题并且知道如何帮助我。谢谢你。只有相关位:
class DefineRoomPropertiesVC: UIViewController {
//MARK: - Init.
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
setupTopMenuBar()
setupViews()
topMenuCollectionView.dragDelegate = self
}
fileprivate let topMenuCollectionView: TopMenuBarCollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = TopMenuBarCollectionView(frame: .zero, collectionViewLayout: layout)
return collectionView
}()
Run Code Online (Sandbox Code Playgroud)
}
extension DefineRoomPropertiesVC: UICollectionViewDragDelegate {
func collectionView(_ collectionView: UICollectionView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] { // called when a drag is initiated. …Run Code Online (Sandbox Code Playgroud) 我似乎无法弄清楚为什么约束锚不起作用
inputsContainerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
inputsContainerView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
inputsContainerView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24).isActive = true
inputsContainerView.heightAnchor.constraint(equalTo: view.heightAnchor, constant: 150).isActive = true
Run Code Online (Sandbox Code Playgroud)
我试过到处寻找,但似乎找不到问题所在。
我没有看到任何冲突的约束或警告,基本上我需要容器看起来像一个位于屏幕中心的白色矩形。
let inputsContainerView = UIView()
inputsContainerView.backgroundColor = UIColor.white
inputsContainerView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(inputsContainerView )
Run Code Online (Sandbox Code Playgroud)
这是它的样子:

它应该是这样的:

假设我有以下代码:
import Foundation
let jsonData = """
[
{"firstname": "Tom", "lastname": "Smith", "age": {"realage": "28"}},
{"firstname": "Bob", "lastname": "Smith", "age": {"fakeage": "31"}}
]
""".data(using: .utf8)!
struct Person: Codable {
let firstName, lastName: String
let age: String?
enum CodingKeys : String, CodingKey {
case firstName = "firstname"
case lastName = "lastname"
case age
}
}
let decoded = try JSONDecoder().decode([Person].self, from: jsonData)
print(decoded)
Run Code Online (Sandbox Code Playgroud)
一切都在工作,除了age总是nil。这是有道理的。我的问题是如何在第一个示例和第二个示例中设置人的年龄 =realage或。取而代之的是在这两种情况下,我想这是在第一种情况。28nilagenil28
有没有办法只使用CodingKeys而不必添加另一个结构或类来实现这一点?如果不是,我如何使用另一个结构或类以最简单的方式实现我想要的?
当我水平滚动集合视图时,我使用 UIcollection 视图作为我的标签栏,当我选择新的单元格时,不会取消选择
这是我选择单元格并取消选择单元格时更改颜色的代码
var selectedIndexPath : IndexPath = []
func collectionView(_ collectionView: UICollectionView,
didSelectItemAt indexPath: IndexPath) {
if let cell = collectionView.cellForItem(at: indexPath) as?
BottomCollectionViewCell {
cell.contentView.backgroundColor = UIColor.orange
cell.backgroundColor = UIColor.orange
}
if let preViousSelectedcell = collectionView.cellForItem(at:
selectedIndexPath) as? BottomCollectionViewCell {
preViousSelectedcell.contentView.backgroundColor=UIColor.purple
preViousSelectedcell.backgroundColor = UIColor.purple
}
selectedIndexPath = indexPath
}
Run Code Online (Sandbox Code Playgroud) 我已经对 CALayer 进行了子类化以创建径向渐变(我从这里的代码开始)。问题是我需要更改渐变的颜色,这是在绘制函数中。我希望每次更改时都能够重绘图层colors。我不能直接打电话,draw(in:)因为我不知道用什么CGContext。有任何想法吗?
import Foundation
import UIKit
class CARadialGradientLayer: CALayer {
required override init() {
super.init()
needsDisplayOnBoundsChange = true
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
required override init(layer: Any) {
super.init(layer: layer)
}
public var colors = [UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 0.5).cgColor, UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 0.00).cgColor] {
didSet {
/* Redraw the layer to update colors */
}
}
override func draw(in …Run Code Online (Sandbox Code Playgroud) 基本上问题是在这个例子中:
let d1 = NSNumber(value: 1.4);
let d2 = d1.doubleValue;
let f1 = NSNumber(value: Float(1.4));
let f2 = d1.floatValue;
Run Code Online (Sandbox Code Playgroud)
d1 结果 1.4
d2 结果 1.3999999999999999
f1 结果 1.4
f2 结果 1.3999999999999998
有谁知道这是为什么?
我正在尝试解析 JSON 文件,例如:
{"name": "something", "version": 1.4}
Run Code Online (Sandbox Code Playgroud)
使用以下代码:
let json = try (JSONSerialization.jsonObject(with: someData) as? [String: Any])!;
let version: Double = (json["version"] as! NSNumber).doubleValue;
Run Code Online (Sandbox Code Playgroud)
或者
let version: Double = json["version"] as! Double;
Run Code Online (Sandbox Code Playgroud)
或者
let version: Double = json["version"] as! Float;
Run Code Online (Sandbox Code Playgroud)
我就是无法得到1.4 ...
四舍五入对我来说不是解决方案,因为我想将此数字写回 JSON 文件,该文件将被其他程序/语言解析,并且在文件中需要正好为 …
我试图了解如何将这个多容器 JSON 解析为一个对象。我已经尝试过这种方法(Mark answer),但他解释了如何使用一级容器解决它。出于某种原因,我无法模仿多个容器的行为。
{
"graphql": {
"shortcode_media": {
"id": "1657677004214306744",
"shortcode": "BcBQHPchwe4"
}
}
}
Run Code Online (Sandbox Code Playgroud)
class Post: Decodable {
enum CodingKeys: String, CodingKey {
case graphql // The top level "user" key
case shortcode_media
}
enum PostKeys: String, CodingKey {
case id
}
required init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
let post = try values.nestedContainer(keyedBy: PostKeys.self, forKey: .shortcode_media)
self.id = try post.decode(String.self, forKey: .id)
}
var id: String
}
Run Code Online (Sandbox Code Playgroud)
我越来越:
Swift.DecodingError.Context(codingPath: [], …Run Code Online (Sandbox Code Playgroud) 我从 API 得到以下响应:
[
{
"stores": [
{
"store": {
"Name": "A store name",
"City": "NY"
}
},
{
"store": {
"Name": "A second store name",
"City": "ny2"
}
}
]
},
{
"products": [
{
"product": {
"name": "a product",
"price": "1"
}
},
{
"product": {
"name": "a second product",
"price": "2"
}
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
对于两个 JSON 对象(商店和产品),我创建了以下结构:
struct shops_response: Codable {
var stores: [stores]
}
struct products_response: Codable {
var products: [products]
}
struct stores: …Run Code Online (Sandbox Code Playgroud)