首先创建一个符合可解码的结构。映射JSON数据是一件好/必要的。
struct MyStruct: Decodable {
let tn_newsid: Int
let tn_midashi: String
let tn_name: String
let tn_ktel: String
let tn_url: String
let tn_kdo: Double
let tn_ido: Double
let tn_im1name: String
let tn_im2name: String
let tn_im3name: String
let tn_im4name: String
let type: Int
let nico_recommended: Int
}
然后假设您的JSON响应看起来像这样:
let responseData: String = """
[
{
"tn_newsid": 1477,
"tn_midashi": "知床半島とオホーツク海の絶景が広がる",
"tn_name": "北海道立オホーツク公園オートキャンプ場てんとらんど",
"tn_ktel": "0152-45-27",
"tn_url": "",
"tn_kdo": 144.239526856306,
"tn_ido": 43.9880220633556,
"tn_im1name": "144377_1.jpg",
"tn_im2name": "144377_2.jpg",
"tn_im3name": "144377_3.jpg",
"tn_im4name": "144377_4.jpg",
"type": 0,
"nico_recommended": 2
},
{
"tn_newsid": 144377,
"tn_midashi": "知ホーツク海の絶景が広がる",
"tn_name": "北海道立オホートキャンプ場てんとらんど",
"tn_ktel": "0152-45-27",
"tn_url": "",
"tn_kdo": 144.239526856306,
"tn_ido": 46.9880220633556,
"tn_im1name": "144377_1.jpg",
"tn_im2name": "144377_2.jpg",
"tn_im3name": "144377_3.jpg",
"tn_im4name": "144377_4.jpg",
"type": 0,
"nico_recommended": 0
}
]
"""
现在解析这样的响应:
let jsonData = responseData.data(using: .utf8)!
let decodedItems: [MyStruct] = try! JSONDecoder().decode([MyStruct].self, from: jsonData)
decodedItems.forEach({print(">>> \($0)")})
实际上,您最好避免使用强制解析数据和解码项目。
输出:
>>> MyStruct(tn_newsid: 1477, tn_midashi: "知床半島とオホーツク海の絶景が広がる", tn_name: "北海道立オホーツク公園オートキャンプ場てんとらんど", tn_ktel: "0152-45-27", tn_url: "", tn_kdo: 144.239526856306, tn_ido: 43.9880220633556, tn_im1name: "144377_1.jpg", tn_im2name: "144377_2.jpg", tn_im3name: "144377_3.jpg", tn_im4name: "144377_4.jpg", type: 0, nico_recommended: 2)
>>> MyStruct(tn_newsid: 144377, tn_midashi: "知ホーツク海の絶景が広がる", tn_name: "北海道立オホートキャンプ場てんとらんど", tn_ktel: "0152-45-27", tn_url: "", tn_kdo: 144.239526856306, tn_ido: 46.9880220633556, tn_im1name: "144377_1.jpg", tn_im2name: "144377_2.jpg", tn_im3name: "144377_3.jpg", tn_im4name: "144377_4.jpg", type: 0, nico_recommended: 0)
意图
是getIntent()
函数活动
class上的速记。您的视图模型无法访问它,而且它可能不应该处理意图
s。只需将您想要的数字传递到功能中:
fun loadAllQuestions(type: Int) {
// treating type == 0 as the default
val jsonStr = "${if (type == 1) "mcq2" else "mcq1"}.json".loadJSONFromAsset()
}
或者更好,为每种类型的一些有意义的名称枚举
enum class QuestionType(val filename: String) {
COOL("mcq1.json"), HARD("mcq2.json")
}
,然后使用这些枚举,因此您不会处理魔术数字,并且更清楚的是,
fun loadAllQuestions(type: QuestionType) {
// no need for a default, you can only pass in valid values now
val jsonStr = type.filename.loadJSONFromAsset()
}
活动中发生了什么,您可以检查您的意图
,解决哪个QuestionType
您的号码与之相关,然后将其传递到loadAllQuestions
调用中。您甚至可以直接使用枚举值,而不是int
使用put/getSerializableExtra
(如果愿意)!
我添加了一个默认结果,而不是使用null,如果数字不有效,但是如果您确实想要nulls,则可以执行此操作:
fun loadAllQuestions(type: Int) {
val jsonStr = when(type) {
0 -> "mcq1.json"
1 -> "mcq2.json"
else -> null
}?.run { loadJSONFromAsset() } // only runs if the result isn't null
}
或
// nullable param now, in case there's no valid value in your extra
fun loadAllQuestions(type: QuestionType?) {
// defaults to null if type is null
val jsonStr = type?.filename?.loadJSONFromAsset()
}
我个人可以推荐“ Roots Bud” - 它具有您需要的所有内容,只需要很少的调整即可。它专门为WordPress制作。
另外,您也可以使用“根10”主题启动器,它已经包含了构建过程。但是,总体而言,它是非常先进的,因此建议对WordPress的工作方式有很好的了解。
想法是计算连续b
,直到我们找到a
。我遵循的步骤
- 跟踪我在找到“ a”之前找到了多少
b
。 - 如果找到
a
,则将b计数
添加到主 output 并重置下一次连续搜索的值。 - 如果找不到
a
,则只需丢弃b计数
跟踪器即可。
//Removing the first and last unnecessary B
String s1 = "BBBAAAABBBBAABB";
s1= s1.substring(s1.indexOf("A"),s1.lastIndexOf("A"));
int output=0;
int bFound=0;
for (int i = 0; i < s1.length(); i++) {
if(s1.charAt(i)=='B'){
System.out.println("B Found");
bFound++;
}else if(bFound>0 && s1.charAt(i)=='A'){
output+=bFound; //adding to main output plus resetting the count
bFound=0;
}
}
System.out.println("Total B to remove: "+output);
if(output>0){
// your print statement
}else{
// your print statement
}
主函数上的数组仍然为空。更好的方法是在初始化之后调用print_array()函数。您只需将print_array(arrr)放入init_array()之后,然后在for loop语句之后。
同时定义两个商店似乎有些不必要,具体取决于预期的语义。它也可以通过一个来源和一个派生的商店来接近。
<script>
import { transformed } from './transform-store.js';
import { writable } from 'svelte/store';
const number = writable(13);
const json = transformed(number, {
in: value => JSON.stringify({ x: value }),
out: value => { try { return JSON.parse(value).x; } catch(err) { return NaN; } },
});
</script>
Number to JSON:
<input bind:value={$number} type="number" />
<input bind:value={$json} />
transform-store.js
import { derived } from 'svelte/store';
export function transformed(store, options) {
const identity = x => x;
const transformIn = options.in ?? identity;
const transformOut = options.out ?? identity;
const { subscribe } = derived(store, $store => transformIn($store));
const set = value => store.set(transformOut(value));
return { subscribe, set };
}
3.48.0从本质上讲,它是通过定义修改源存储的自己的set
函数来增强的衍生商店。
这也可以通过使用反应性陈述和属性描述符:
<script>
function transformed(get, set) {
const o = {};
Object.defineProperty(o, 'value', { get, set });
return o;
}
let number = 13;
$: json = transformed(
() => JSON.stringify({ x: number }),
value => { try { number = JSON.parse(value).x; } catch(err) { number = NaN; } },
)
</script>
Number to JSON:
<input bind:value={number} type="number" />
<input bind:value={json.value} />
不过,理想情况下,只会对此提供内置的语言支持。
为了避免问题,请在nextline();
之后使用 nextint(); 之后,因为它有助于清除缓冲区。当您按输入
nextInt();
不会捕获新行,因此请稍后跳过scanner
代码。
Scanner scanner = new Scanner(System.in);
int option = scanner.nextInt();
scanner.nextLine(); //clearing the buffer
,因为主动设置为false。
登录页面将首先显示“
const HomePage = () => {
const[active,setActive]=useState(false);
return (
<div>
<Navbar activesetter={setActive} />
<Login activestatus={active} />
<div id="content">
</div>
</div>
);
}
不活动”
const Login = (props) => {
return(
<div>
<div>
{props.activestatus ? "it is active" : "it is not active" }
</div>
</div>
);
}
它
const Navbar = (props) => {
const handleSubmit=(e)=> {
e.preventDefault();
props.activesetter(true);
}
return(
<div>
<form onSubmit={handleSubmit}>
<button type="submit">Login</button>
</form>
</div>
);
}
有多个选项可用,因为您没有提及框架版本,因此提到最通用的&amp;宽松的方式来做到这一点。
$name = $request->name;
if(!$validation->fails()) {
$product = Product::find($id);
$product->setSlugAttribute($request->name);
if($product->save()) {
return response()->json(200);
}
}else{
return response()->json(['errors' => $validation->errors()],401);
}
还有其他一些,您可以根据Laravel版本尝试。检查文档在这里
在打字稿中分组的对象数组与此:
groupBy (list: any[], key: string): Map<string, Array<any>> {
let map = new Map();
list.map(val=> {
if(!map.has(val[key])){
map.set(val[key],list.filter(data => data[key] == val[key]));
}
});
return map;
});
帮助我的解决方案正在使用.wheregreaterthanorequalto(“日期”,“ 01/5/2022”)。wherelessthanorequalto(“ date”,“ 31/5/2022”)。
装饰器处理同步和异步函数
您可以创建一个装饰函数,该功能可以处理同步和异步功能。
在下面的摘要中,logger
是一种装饰函数,它具有作为参数的功能,并返回处理日志记录的装饰函数。
如果输入函数返回Promise
,则使用 “ rel =“ nofollow noreferrer”> Promise.prototype.finally 。
const logger =
(func) =>
(...args) => {
console.log(`Started: ${func.name}`);
try {
const ret = func(...args);
if (ret instanceof Promise) {
return ret.finally(() => console.log(`Ended: ${func.name}`));
}
console.log(`Ended: ${func.name}`);
return ret;
} catch (err) {
console.log(`Ended: ${func.name}`);
throw err;
}
};
const sleep = (timer) => new Promise((res) => setTimeout(res, timer));
const asyncAdd = logger(async function asyncAdd(a, b) {
await sleep(1000).then();
console.log(`Adding ${a} and ${b}`);
return a + b;
});
const syncSubtraction = logger(function syncSubtraction(a, b) {
console.log(`Subtracting ${b} from ${a}`);
return a - b;
});
console.log(`Result of syncSubtraction(2, 1): ${syncSubtraction(2, 1)}`);
console.log("=========================");
asyncAdd(1, 2).then((res) => console.log(`Result of asyncAdd(1, 2): ${res}`));
.as-console-wrapper { max-height: 100% !important; top: 0; }
注意:
使用
最后
方法确保即使装饰了异步功能的“ ended” log即使失败了。尝试...捕获
块可确保同一件事,但对于同步函数。
const logger =
(func) =>
(...args) => {
console.log(`Started: ${func.name}`);
try {
const ret = func(...args);
if (ret instanceof Promise) {
return ret.finally(() => console.log(`Ended: ${func.name}`));
}
console.log(`Ended: ${func.name}`);
return ret;
} catch (err) {
console.log(`Ended: ${func.name}`);
throw err;
}
};
const syncFail = logger(function syncFail() {
console.log("Inside syncFail");
throw new Error("Error in syncFail");
});
const sleep = (timer) => new Promise((res) => setTimeout(res, timer));
const asyncFail = logger(async function asyncFail() {
await sleep(1000);
console.log("Inside asyncFail");
throw new Error("Error in asyncFail");
});
try {
syncFail();
} catch (err) {
console.log(err.message);
}
console.log("==========================");
asyncFail().catch((err) => console.log(err.message));
.as-console-wrapper { max-height: 100% !important; top: 0; }
处理错误案例的方式不同:
如果要处理错误方案的处理方式与成功方案不同,例如,通过打印错误日志而不是结束日志,请参阅下面的摘要:
const logger =
(func) =>
(...args) => {
console.log(`Started: ${func.name}`);
try {
const ret = func(...args);
if (ret instanceof Promise) {
return ret
.then((res) => {
console.log(`Ended: ${func.name}`);
return res;
})
.catch((err) => {
console.log(`Errored: ${func.name}`);
throw err;
});
}
console.log(`Ended: ${func.name}`);
return ret;
} catch (err) {
console.log(`Errored: ${func.name}`);
throw err;
}
};
const syncFail = logger(function syncFail() {
console.log("Inside syncFail");
throw new Error("Error in syncFail");
});
const sleep = (timer) => new Promise((res) => setTimeout(res, timer));
const asyncFail = logger(async function asyncFail() {
await sleep(1000);
console.log("Inside asyncFail");
throw new Error("Error in asyncFail");
});
try {
syncFail();
} catch (err) {
console.log(err.message);
}
console.log("==========================");
asyncFail().catch((err) => console.log(err.message));
.as-console-wrapper { max-height: 100% !important; top: 0; }
成功情景的行为没有改变:
const logger =
(func) =>
(...args) => {
console.log(`Started: ${func.name}`);
try {
const ret = func(...args);
if (ret instanceof Promise) {
return ret
.then((res) => {
console.log(`Ended: ${func.name}`);
return res;
})
.catch((err) => {
console.log(`Errored: ${func.name}`);
throw err;
});
}
console.log(`Ended: ${func.name}`);
return ret;
} catch (err) {
console.log(`Errored: ${func.name}`);
throw err;
}
};
const sleep = (timer) => new Promise((res) => setTimeout(res, timer));
const asyncAdd = logger(async function asyncAdd(a, b) {
await sleep(1000).then();
console.log(`Adding ${a} and ${b}`);
return a + b;
});
const syncSubtraction = logger(function syncSubtraction(a, b) {
console.log(`Subtracting ${b} from ${a}`);
return a - b;
});
console.log(`Result of syncSubtraction(2, 1): ${syncSubtraction(2, 1)}`);
console.log("=========================");
asyncAdd(1, 2).then((res) => console.log(`Result of asyncAdd(1, 2): ${res}`));
.as-console-wrapper { max-height: 100% !important; top: 0; }
看起来您没有设置PHP服务器。
首先,您需要http://localhost/index.php工作。当您的PHP代码工作时,请尝试发布Python的消息。
您可以在此处找到有关在服务器端设置PHP的信息: https://wwww.php。 NET/MANUAL/install.php
更新此行:
Update this line:
如何显示在哪个侧用户转动电话,如果我使用MKMAPVIEW显示用户位置