小编Wis*_*uns的帖子

使用闭包作为参数而不带尾随闭包 Swift

当使用尾随闭包语法时,将一个函数作为另一个函数的参数传递似乎很容易。

但是我想在不使用尾随闭包语法的情况下执行此操作

func doSomethingTwo(closure: (String) -> Void) {
    closure("AAA")
}

doSomethingTwo(closure: print("TEST") )
Run Code Online (Sandbox Code Playgroud)

给出无法将类型“()”的值转换为预期参数类型“(String) -> Void”

我知道

doSomethingTwo{ (test: String) in
    print ("\(test)")
}
Run Code Online (Sandbox Code Playgroud)

有效,但希望没有尾随闭包语法。

这不是一个家庭作业问题,我正在查看教程并进行了研究,但没有给我这个问题的答案。

ios swift

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

枚举是否符合RawRepresentable

在Swift书中,枚举的示例很好用

enum CompassPoint: String {
    case north, south, east, west
}

var northCom = CompassPoint.north
print (northCom)
Run Code Online (Sandbox Code Playgroud)

但是我想使用一个失败的初始化器,所以做了一个例子

enum WeekDay: String {
    case monday, tuesday, wednesday, thursday, friday
    init?(rawValue: Int){
        switch rawValue {
        case 0 : self = .monday
        case 1 : self = .tuesday
        case 2 : self = .wednesday
        case 3 : self = .thursday
        case 4 : self = .friday
        default : return nil
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并得到一个错误,指出Weekday不符合RawRepresentable-尽管我认为一致性应该由编译器综合,所以不明白为什么它不能编译。

我所做的事情创建了一个类似的工作示例(以查看问题所在),但我仍然希望使用带有可初始化失败器的枚举来符合RawRepresentable。在Swift书中,Stack Overflow问题或更广泛的Internet上,我找不到这样的示例。

我提供的内容给出上面的完整示例,并提供错误以及我期望的行为的有效示例。

没有帮助的地方通过链接或评论引用Swift书籍无济于事,因为我从那里开始举例。我想使用一个失败的初始化程序建立该示例。不使用枚举或可失败的初始化程序也无济于事。问题是关于将可失败的初始化器与枚举一起使用,并符合RawRepresentable。这不是家庭作业,但是这些是我自己学习所遇到的问题的限制,我对结果感兴趣。

问题如非工作示例中那样,如何使用带有枚举的可故障初始化器?

swift

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

模拟 URLSession 以返回模拟 URLSessionDataTask

我想嘲笑URLSession,并返回一个嘲笑URLSessionDataTask

为了模拟URLSession我创建一个协议

protocol URLSessionProtocol {
    func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask
}
Run Code Online (Sandbox Code Playgroud)

然后可以URLSession在扩展中符合

extension URLSession: URLSessionProtocol {}
Run Code Online (Sandbox Code Playgroud)

现在我想对 做同样的事情URLSessionDataTask,并为其实现类似的协议和扩展。我需要这样做,因为我调用的方式URLSession需要使用func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask

protocol URLSessionDataTaskProtocol {
    func resume()
}

extension URLSessionDataTask: URLSessionDataTaskProtocol {}
Run Code Online (Sandbox Code Playgroud)

那么我的URLSessionDataTask模拟设置如下:

class URLSessionMock: URLSessionProtocol {
    typealias CompletionHandler = (Data?, URLResponse?, Error?) -> Void
    // data and error …
Run Code Online (Sandbox Code Playgroud)

mocking swift

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

将 S3 字节数组转换为 base64

在我的 NodeJS 服务器上,我下载了一个需要嵌入电子邮件中的图像。我的存储桶不是公开的,因此仅使用该链接是行不通的,因为这不是我想要满足此问题或项目要求的解决方案。

我使用的是 HTML 电子邮件,内容如下:

<p>Embedded image: <img src="data:image/jpeg;charset=utf-8;base64,{{url}}" /></p>
Run Code Online (Sandbox Code Playgroud)

所以我从S3下载

s3.getObject(
                          { Bucket: "mybucket", Key: "mykey" },
                          function (error, data) {
                            if (error != null) {
                              console.log("Errror" + error)
                            } else {
                              console.log("Loaded " + data.ContentLength + " bytes")
Run Code Online (Sandbox Code Playgroud)

然后我尝试将 data.body 转换为 UTF-8 base 64

我想像

"data:image/png;base64," + new String(encoder.encode(data.body), "UTF-8")
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用,我正在努力定义编码器来做到这一点。

javascript node.js

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

Swift 中的粗体动态类型

在此输入图像描述

为什么UILabel我们有以下动态字体:

        artistLabel.font = UIFont.preferredFont(forTextStyle: .body, compatibleWith: UITraitCollection(legibilityWeight: .regular))
        artistLabel.adjustsFontForContentSizeCategory = true
        
        trackLabel.font = UIFont.preferredFont(forTextStyle: .body, compatibleWith: UITraitCollection(legibilityWeight: .bold))
        trackLabel.adjustsFontForContentSizeCategory = true
Run Code Online (Sandbox Code Playgroud)

粗体和常规看起来一样吗?如何获得真正的“粗体”字体?

accessibility swift dynamic-type-feature

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

VStack中的ScrollView与swiftui中的底部对齐

我无法让这个滚动视图与 SwiftUI 中的底部对齐!

我在滚动视图中有三个项目,但我希望它们与屏幕底部对齐(红色箭头显示我想要这些项目的位置!)

在此输入图像描述

这是我的代码:

import SwiftUI

struct ContentView: View {
    var body: some View {
        ZStack {
            Color.blue.edgesIgnoringSafeArea(.all)
            VStack {
                ScrollView {
                    Spacer(minLength: 80)
                    Text("a")
                    Text("b")
                    Text("c")
                }.frame(maxHeight: /*@START_MENU_TOKEN@*/.infinity/*@END_MENU_TOKEN@*/)
                Text("Button")
                    .padding()
            }.frame(alignment: .bottom)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试间隔,并将内容旋转 180 度?我应该怎么办?

swiftui

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

UITableViewCell XCTest 中的测试单元

我正在测试视图控制器所在的 UITableView

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        setup()
    }

    func setup() {
        tableView.dataSource = self
        tableView.delegate = self
        tableView.register(CustomTableViewCell.self, forCellReuseIdentifier: "CustomTableViewCell")
    }


    var data = [1,2,3,4,5,6,7]
}

extension ViewController : UITableViewDelegate {

}

extension ViewController : UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell", for: indexPath)
        cell.textLabel?.text = data[indexPath.row].description …
Run Code Online (Sandbox Code Playgroud)

tdd ios xctest swift

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

将 UITableView 与组合数据源绑定

我想直接将 aUITableView与 @Published 属性链接,而不使用 DiffableDataSouce。

如果我让这个人

struct Person {
    let name: String
}
Run Code Online (Sandbox Code Playgroud)

并创建数据数组:

@Published
var people = [Person(name: "Kim"), Person(name: "Charles")]
Run Code Online (Sandbox Code Playgroud)

所以我想UITableView直接绑定我的,比如:

struct Person {
    let name: String
}
Run Code Online (Sandbox Code Playgroud)

但这给出了错误

Cannot convert return expression of type 'Publishers.Count<Published[Person]>.Publisher>' to return type 'Int'

swift combine

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

Swift 字符串包含 , 或 . 但不是两者都

我想以更优雅的方式编写以下内容:

let number = "1,2922.3"

if number.contains(",") || number.contains(".") && !(number.contains(".") && number.contains(",")) {
    // proceed
}
Run Code Online (Sandbox Code Playgroud)

也就是说,如果号码有“.”,我想继续。或“,”,但不能同时使用它们。

一定有更好的方法?

我不想使用扩展,因为它位于我的代码中的一个位置。

swift

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

在 Swift 代码中任务似乎总是按顺序运行

这段代码似乎总是像魔术一样工作。没有任何锁定,输出为 1,2。

class Counter {
    var count = 0
    func increment() -> Int {
        count += 1
        return count
    }
}

class ViewController: UIViewController {
    
    var tasks = [Task<Void, Never>]()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let counter = Counter()
        
        tasks += [
            Task.detached {
                print(counter.increment())
            }
        ]

        tasks += [
            Task.detached {
                print(counter.increment())
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码来自https://www.andyibanez.com/posts/understanding-actors-in-the-new-concurrency-model-in-swift/

我预计它会不一致地工作。我尝试将其切换为不使用分离任务,但它仍然总是返回 1,2。到底是怎么回事?

swift swift-concurrency

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

在Swift中使用JSONDecoder进行错误处理

JSONDecoder()在Swift中使用,需要获取更好的错误消息。

在调试描述中(例如),我可以看到诸如“给定的数据不是有效的JSON”之类的消息,但是我需要知道的是,而不是网络错误(例如)。

    let decoder = JSONDecoder()
    if let data = data{
        do {
            // process data

        } catch let error {
           // can access error.localizedDescription but seemingly nothing else
    }
Run Code Online (Sandbox Code Playgroud)

我尝试将其强制转换为DecodingError,但这似乎并未显示更多信息。我当然不需要字符串-甚至错误代码也比这有用得多...

json swift

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