标签: swift4

在 Xcode 9 中使用 Swift 3 / Swift 4 在 XCUITest 中处理系统对话框(警报)

我想编写一个 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)

swift3 swift4 xcode9 xcuitest

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

UIImageViewcornerRadius 没有让它圆

我有一个视图控制器,它显示在 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可能会压缩设计,但其他元素特别是更新按钮似乎很好。所以有什么建议可以解决这个问题吗?

uiview uiimageview ios swift4

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

从集合视图单元格拖动适用于 iPad 模拟器,但不适用于 iPhone 模拟器或 Swift 4 中的真实设备

我在 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)

drag-and-drop swift4

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

约束锚在 Swift 4 中运行不佳

我似乎无法弄清楚为什么约束锚不起作用

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)

这是它的样子:

这是它的样子

它应该是这样的:

这就是它的样子

constraints swift swift4

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

使用具有多个键的可解码协议

假设我有以下代码:

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而不必添加另一个结构或类来实现这一点?如果不是,我如何使用另一个结构或类以最简单的方式实现我想要的?

json swift swift4 codable

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

ios UICollectionView 单元格选择和取消选择问题

当我水平滚动集合视图时,我使用 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)

ios uicollectionview swift4 xcode9

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

CALayer:如何调用draw函数?

我已经对 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)

core-graphics draw calayer swift swift4

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

Swift 4:奇怪的 Double 和 Float 行为

基本上问题是在这个例子中:

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 文件,该文件将被其他程序/语言解析,并且在文件中需要正好为 …

floating-point macos double swift4

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

Swift 4 可解码多个容器

我试图了解如何将这个多容器 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)

containers json swift4 codable decodable

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

如何在 Swift 4 中使用根元素作为数组正确解析 JSON?

我从 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)

json swift4

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