当使用尾随闭包语法时,将一个函数作为另一个函数的参数传递似乎很容易。
但是我想在不使用尾随闭包语法的情况下执行此操作
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)
有效,但希望没有尾随闭包语法。
这不是一个家庭作业问题,我正在查看教程并进行了研究,但没有给我这个问题的答案。
在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。这不是家庭作业,但是这些是我自己学习所遇到的问题的限制,我对结果感兴趣。
问题如非工作示例中那样,如何使用带有枚举的可故障初始化器?
我想嘲笑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) 在我的 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)
但它似乎不起作用,我正在努力定义编码器来做到这一点。
为什么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)
粗体和常规看起来一样吗?如何获得真正的“粗体”字体?
我无法让这个滚动视图与 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 度?我应该怎么办?
我正在测试视图控制器所在的 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) 我想直接将 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'
我想以更优雅的方式编写以下内容:
let number = "1,2922.3"
if number.contains(",") || number.contains(".") && !(number.contains(".") && number.contains(",")) {
// proceed
}
Run Code Online (Sandbox Code Playgroud)
也就是说,如果号码有“.”,我想继续。或“,”,但不能同时使用它们。
一定有更好的方法?
我不想使用扩展,因为它位于我的代码中的一个位置。
这段代码似乎总是像魔术一样工作。没有任何锁定,输出为 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。到底是怎么回事?
我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,但这似乎并未显示更多信息。我当然不需要字符串-甚至错误代码也比这有用得多...